我正在尝试通过“从头开始编程”一书来学习组装。本书仅涵盖 32 位指令。有没有办法在 64 位 Ubuntu 系统上运行示例代码?我无法理解 GNU 汇编器手册页上的内容,但我听说-m32
标志应该这样做。但这不是公认的选择。
如何让书中的示例轻松工作?
我正在尝试通过“从头开始编程”一书来学习组装。本书仅涵盖 32 位指令。有没有办法在 64 位 Ubuntu 系统上运行示例代码?我无法理解 GNU 汇编器手册页上的内容,但我听说-m32
标志应该这样做。但这不是公认的选择。
如何让书中的示例轻松工作?
当您的汇编器和链接器是 x86_64 版本时,产生 i386(32 位)输出的选项是
as --32
ld -m elf_i386
您不必使用as
并且ld
仅仅因为您正在使用汇编代码。gcc
可以使用,在这种情况下,您将使用-m32
.
gcc -m32 -nostdlib myprog.s -o myprog
从 as 手册页:
Target i386 options:
[--32|--n32|--64] [-n]
[-march=CPU[+EXTENSION...]] [-mtune=CPU]
我不确定它是否有效,只需尝试--32
或--n32
.
(-m32
似乎 ge 对应的 gcc 标志。)
在 64 位 PC 上创建 32 位可执行文件需要您“警告”链接器即将出现 32 位 elf 文件:
$ nasm -f elf -g -F 刺吃.asm
$ ld -o 吃eat.o -melf_i386
这就是 melf_i386 指令的作用:它告诉 ldeat.o 文件是一个 elf32 可链接目标文件。NASM 的调用与在 32 位 PC 上使用的相同。
谢谢@Jeff Duntemann