我正在尝试通过本书"Programming from the ground up"了解有关程序集的知识。本书仅涵盖32位指令。有没有办法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编程序手册页上的内容,但我听到-m32
标志应该这样做。但这不是一个公认的选择。在64位系统(Ubuntu)上编译32位程序集
我该如何获得书上的示例以轻松工作?
我正在尝试通过本书"Programming from the ground up"了解有关程序集的知识。本书仅涵盖32位指令。有没有办法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编程序手册页上的内容,但我听到-m32
标志应该这样做。但这不是一个公认的选择。在64位系统(Ubuntu)上编译32位程序集
我该如何获得书上的示例以轻松工作?
当你的汇编器和连接器是x86_64的版本中,选择生产的i386(32位)输出是
as --32
ld -m elf_i386
你不”只需要使用汇编代码就可以使用as
和ld
。可以使用gcc
,在这种情况下,您可以使用-m32
。
gcc -m32 -nostdlib myprog.s -o myprog
太棒了!谢谢你的提示。 – huggie
从作为手册页:
Target i386 options:
[--32|--n32|--64] [-n]
[-march=CPU[+EXTENSION...]] [-mtune=CPU]
我不知道,如果它的工作原理,只是尝试--32
或--n32
。
(-m32
似乎GE相应的GCC标志。)
手册页中的'--n32'似乎是'--x32'的拼写错误。对于本书中的旧代码,你需要'--32'。 '--x32'用于使用x86_64功能的新代码,但需要32位指针。当使用'as --32'时,你可能还需要'-m elf_i386'作为'ld'命令。 –
@ WumpusQ.Wumbley太棒了!我会检查你的答案,如果你发布一个。 :) 请注意,这是今天学习大会的推荐方式吗?我知道这本书有点旧,但看起来很不错。任何与本书一样好的64位替代资源将会有所帮助。 :) – huggie
创建64位PC上的32位可执行文件需要你 “警告” 的链接,一个32位的ELF文件来了:
$ NASM -f精灵-g - ˚F刺eat.asm
$ LD -o吃eat.o -melf_i386
这就是melf_i386指令的作用:它告诉LD的eat.o文件是ELF32链接的目标文件。 NASM的调用与您在32位PC上使用的相同。
谢谢@Jeff Duntemann
您能给这本书提供参考吗?或者显示一些样品? –
链接现在给出。第一个程序是我试图运行的程序。 – huggie
我认为最好的方法是在VirtualBox中安装32位Ubuntu。还有其他选项(请参阅https://help.ubuntu.com/community/32bit_and_64bit),但这非常困难。 –