由于现在使用的系统大多是64位系统,但是做作业有时候需要使用到32位的程序。故写一篇博客备忘。

编译

写C程序的时候不会突出用的是32位还是64位,因此C语言最终编译成.o代码的时候要给编译器指定参数来编译出32位目标代码。

gcc -c -m32 hello.c

如果源代码文件中引用了库文件,则要注意此64位系统上已经安装了必要的32位程序库,否则将编译失败。安装:

sudo apt-get install gcc-multilib

NASM汇编

NASM语言编写.asm汇编文件的时候就要根据32位或者64位来确定使用寄存器的名称了。如果汇编文件是使用32位格式来写的,在64位系统上也可以汇编成32bit的目标文件。使用如下命令:

nasm -f elf -o hello.o hello.asm

链接

将多个目标文件,以及库文件进行链接的时候,如果要链接形成32位可执行程序需要用参数指定:

ld -m elf_i386 -o app hello.o try.o