在64位系统(Ubuntu)上编译32位程序集



我正试图通过《从头开始编程》一书来学习组装。这本书只包含32位指令。有没有办法在64位Ubuntu系统上运行示例代码?我不明白GNU汇编程序手册页上的内容,但我听说-m32标志应该这么做。但它不是一个公认的选项。

我如何让书上的例子轻松地发挥作用?

当您的汇编程序和链接器是x86_64版本时,生成i386(32位)输出的选项是

as --32
ld -m elf_i386

您不必仅仅因为使用汇编代码就使用asld。可以使用gcc,在这种情况下,您将使用-m32

gcc -m32 -nostdlib myprog.s -o myprog

来自手册页:

   Target i386 options:
      [--32|--n32|--64] [-n]
      [-march=CPU[+EXTENSION...]] [-mtune=CPU]

我不确定它是否有效,只需尝试--32--n32即可。

-m32似乎生成了相应的gcc标志。)

在64位PC上创建32位可执行文件需要"警告"链接器32位elf文件即将到来:

$nasm-f-elf-g-f刺伤吃。asm

$ld-o吃-吃。o-melf_i386

这就是melf_i386指令的作用:它告诉ld eat.o文件是elf32可链接的对象文件。NASM的调用与您在32位PC上使用的调用相同。

感谢@Jeff Duntemann

最新更新