NASM 在虚拟机 Ubuntu 上:无法执行二进制文件 exec 格式错误
NASM on Virtual Machine Ubuntu: Cannot execute binary file exec format error
我在组装一个简单的 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 虚拟机中执行此操作。
我感谢您的帮助!
你可能有32位的,再检查一遍。另外,正如帮助所说,还有更多二进制格式,请尝试以下操作:elfx32, elf32, elf.
错误:
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 位 OS 不能直接 运行 64 位应用程序。如果需要生成 运行 64 位代码,则需要安装 64 位 Ubuntu OS.
64 位 Ubuntu 系统可以配置为允许使用 multilib 支持开发 32 位和 64 位代码。如果使用 C/C++(或只是 C 库)构建软件,将这些软件包安装在 Ubuntu:
上可能会有用
sudo apt-get install gcc-multilib g++-multilib
假设您确实安装了 64 位 OS,用于 link 可执行文件的命令似乎不正确。你有:
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
的可执行文件
我在组装一个简单的 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 虚拟机中执行此操作。 我感谢您的帮助!
你可能有32位的,再检查一遍。另外,正如帮助所说,还有更多二进制格式,请尝试以下操作:elfx32, elf32, elf.
错误:
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 位 OS 不能直接 运行 64 位应用程序。如果需要生成 运行 64 位代码,则需要安装 64 位 Ubuntu OS.
64 位 Ubuntu 系统可以配置为允许使用 multilib 支持开发 32 位和 64 位代码。如果使用 C/C++(或只是 C 库)构建软件,将这些软件包安装在 Ubuntu:
上可能会有用sudo apt-get install gcc-multilib g++-multilib
假设您确实安装了 64 位 OS,用于 link 可执行文件的命令似乎不正确。你有:
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
的可执行文件