gpt4 book ai didi

assembly - 虚拟机 Ubuntu 上的 NASM : Cannot execute binary file exec format error

转载 作者:行者123 更新时间:2023-12-02 22:04:31 27 4
gpt4 key购买 nike

在组装一个简单的 64 位 hello world 程序后,我收到错误。我正在使用以下命令:

nasm -f elf64 hello.asm -o hello.o    successfull
ld -o hello.o hello -m elf_x86_64 successfull
./hello

错误:无法执行二进制文件exec格式错误

我正在 64 位 Ubuntu 虚拟机中执行此操作。我感谢您的帮助!

最佳答案

错误:

error: Cannot execute binary file exec format error

表明您的系统无法理解您尝试运行的可执行文件。在我的评论中,我要求您运行uname -a,以便我可以找出您在虚拟机中运行的系统类型。您给出的输出为:

Linux dell 3.16.0-50-generic #67~14.04.1-Ubuntu SMP Fri...i686 i686 i686 GNU/LINUX

i686 告诉我们这是 Ubuntu 的 32 位版本,而不是 64 位。如果输出包含 x86_64 那么您将使用 64 位 Ubuntu。

32位操作系统无法直接运行64位应用程序。如果您需要生成并运行 64 位代码,则需要安装 64 位 Ubuntu 操作系统。

通过使用 multilib 支持,可以将 64 位 Ubuntu 系统配置为允许开发 32 位和 64 位代码。如果使用 C/C++(或仅 C 库)构建软件,在 Ubuntu 上安装这些软件包可能会很有用:

sudo apt-get install gcc-multilib g++-multilib
<小时/>

假设您确实安装了 64 位操作系统,则用于链接可执行文件的命令将显示不正确。你有:

nasm -f elf64 hello.asm -o hello.o    
ld -o hello.o hello -m elf_x86_64
./hello

NASM 命令看起来没问题。它将 hello.asm 汇编成一个名为 hello.o 的 64 位目标文件。 LD 命令被告知从名为 hello 的文件生成名为 hello.o 的 64 位输出文件。命令应该如下所示:

nasm -f elf64 hello.asm -o hello.o    
ld -o hello hello.o -m elf_x86_64
./hello

请注意,我们现在使用 -o hello,因为我们想要从名为 hello.o 的目标文件输出名为 hello 的可执行文件。

关于assembly - 虚拟机 Ubuntu 上的 NASM : Cannot execute binary file exec format error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com