在64位系统(Ubuntu)上编译32位汇编代码

12
我正在尝试通过书籍"从零开始编程"学习汇编语言。该书仅涵盖32位指令。是否有方法在64位Ubuntu系统上运行示例代码?我无法理解GNU汇编器手册中的内容,但听说-m32标志应该可以做到。但它不是一个被识别的选项。
如何轻松使书中的示例代码工作?

你能否给一本书的参考资料?或者展示一些样例? - Kurt Pattyn
1
链接已经给出。第一个程序就是我正在尝试运行的程序。 - huggie
我认为最好的方法是在VirtualBox中安装32位Ubuntu。还有其他选项(请参见https://help.ubuntu.com/community/32bit_and_64bit),但这确实很困难。 - Alex F
3个回答

23

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

as --32
ld -m elf_i386

你不必仅因为在处理汇编代码就使用 asld。可以使用 gcc,这种情况下你需要使用 -m32

gcc -m32 -nostdlib myprog.s -o myprog

4

从man页面中获取:

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

我不确定是否有效,可以尝试使用--32--n32

(-m32似乎是对应的gcc标志。)


手册中的“--n32”似乎是“--x32”的拼写错误。对于像本书中的旧代码,您需要使用“--32”。“--x32”适用于使用x86_64特性但希望使用32位指针的新代码。当使用“as --32”时,您可能还需要为“ld”命令使用“-m elf_i386”。 - user2404501
@WumpusQ.Wumbley 很好,它有效了!如果您发布一个答案,我会检查您的答案。:) 顺便说一下,现在学习汇编是否推荐这种方法?我知道这本书有点旧,但它似乎是一本不错的书。任何64位替代资源,与这本书差不多好的都会很有帮助。 :) - huggie

0

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

$ nasm -f elf -g -F stabs eat.asm

$ ld -o eat eat.o -melf_i386

melf_i386指令的作用是告诉ld,eat.o文件是一个elf32可链接目标文件。NASM的调用方式与在32位PC上使用的相同。

感谢@Jeff Duntemann


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接