如何在64位Linux上使用Gas('as')将源代码组装成32位二进制文件?
这是为了遵循32位教程,没有必要将所有指针和大量指令更改为四字的麻烦。
谢谢,
克里斯。
P.S。我可以轻松地在C ...
这样做chris@chris-linux-desktop:~$ cat test.c
#include "stdio.h"
int main() {
printf("hello world");
return 0;
}
chris@chris-linux-desktop:~$ gcc test.c -o test64
chris@chris-linux-desktop:~$ gcc -m32 test.c -o test32
chris@chris-linux-desktop:~$ file test32
test32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
chris@chris-linux-desktop:~$ file test64
test64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
答案 0 :(得分:5)
将as
与“--32”选项一起使用,例如
as --32 source.s -o objectfile
或者您可以使用gcc来汇编和链接汇编源文件。 gcc在结尾处认出它。
gcc -m32 source.s -o executable
答案 1 :(得分:1)
您可能还需要使用链接器-m
选项链接文件,以便为不同的目标体系结构设置模拟。 ld --help
列出了可能的仿真值。
ld -m elf_i386 -o file file.o file2.o ...etc