所以我是新尝试 asm,我想编译一个小程序,它只使用 i386 指令而不是 x86-64 指令退出。我有一个 x86-64 Ubuntu,它可以完美地编译和运行 x86-64,但我不知道如何在同一台 x86-64 机器上组装和链接 i386 版本(我已经安装了 i386 compat)。
我知道已经回答了类似的问题,但是他们都没有使用as
并ld
做到这一点,所以我不知道如何将这些解决方案转化为我的问题。
对于我使用的 x86-64 as
,ld
如下所示:
# Assemble: as exit.s -o exit.o
# Linking: ld exit.o -o exit
x86-32版本的程序:
.section .data
.section .text
.globl _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
现在..我一直在寻找如何做到这一点,并发现了--32
in as 和-m {arg}
inld
但是每次我编译它而没有拱形错误时,它都会给我“文件格式错误”错误。
我试过用 elf_i386 和 i386linux 做 ld 像这样:
as --32 exit.s -o exit.o
ld -m elf_i386 exit.o -o exit
#Error: -bash: ./exit: cannot execute binary file: File in wrong format
ld -m i386linux exit.o -o exit
#Error: -bash: ./exit: cannot execute binary file: File in wrong format
我想补充一点,为了兼容性,我已经安装了 Ubuntu 帮助论坛中列出的这些软件包:
sudo dpkg --add-architecture i386
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo apt-get install multiarch-support