如何在64位Linux上使用Gas('as')组装32位二进制文​​件?

时间:2011-10-28 09:25:15

标签: assembly 32bit-64bit

如何在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

2 个答案:

答案 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