现在有个需求,在64位linux下将一个c语言文件和一个intel格式汇编语言文件一起编译为一个32位无格式二进制文件,下面是我找到的方法。
解决方法
对c语言文件作如下处理
gcc ccode.c -m32 -S -o ccode.s
然后将得到的汇编文件与机器语言无关的伪代码删掉,并删除这行代码
addl $_GLOBAL_OFFSET_TABLE_, %eax
接着用as命令将修改后的汇编代码编译为目标文件
as ccode.s -o ccode.o --32
对intel语法的汇编文件,使用nasm处理
nasm -f elf32 acode.asm -o acode.o
最后运行ld命令将两个目标文件连接起来并取其无格式二进制机器码部分
ld --oformat binary -o exec.bin acode.o ccode.o -e 0 -m elf_i386
得到的exec.bin便是所需的文件