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

发布于 2024-12-12 09:12:41 字数 756 浏览 1 评论 0原文

如何在 64 位 Linux 上使用 Gas ('as') 将源代码汇编为 32 位二进制文​​件?

这是为了遵循 32 位教程,而无需将所有指针和大量指令更改为四字。

谢谢,

克里斯。

PS我可以用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

How can I use Gas ('as') to assemble source to a 32 bit binary on 64 bit Linux?

This is for the purpose of following 32 bit tutorials without the hassle of having to change all the pointers and lots of instructions to quad words.

Thanks,

Chris.

P.S. I can easily do this in 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悍妇囚夫 2024-12-19 09:12:42

as 与选项“--32”一起使用,例如

as --32 source.s -o objectfile

或者您可以仅使用 gcc 来汇编和链接汇编器源文件。 gcc 通过结尾来识别它。

gcc -m32 source.s -o 可执行文件

Use as with the option "--32", like

as --32 source.s -o objectfile

Or you can just use gcc to assemble and link an assemler source file. gcc recognizes it by the ending.

gcc -m32 source.s -o executable

姐不稀罕 2024-12-19 09:12:42

您可能还需要使用链接器 -m 选项来链接文件,以便为不同的目标体系结构设置模拟。 ld --help 给出可能的模拟值列表。

ld -m elf_i386 -o file file.o file2.o ...etc

You might also need to link files using the linker -m option to set emulation for different target architectures. ld --help gives list of possible emulation values.

ld -m elf_i386 -o file file.o file2.o ...etc
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文