我目前正在尝试在Trisquel发行版上学习汇编语言(我猜想是在后台使用Ubuntu?)。由于某些原因,我停留在创建和执行程序集片段的第一步。
.section data
.section text
.globl _start
_start:
movl $1, %eax # syscall for exiting a program
movl $0, %ebx # status code to be returned
int $0x80
当我尝试组装并链接它以创建可执行文件并运行该可执行文件时,我得到如下信息:
> as myexit.s -o myexit.o && ld myexit.o -o myexit
> ./myexit
bash: ./myexit: cannot execute binary file
我不确定这里到底发生了什么。搜索后,似乎在尝试在64位OS上执行32位可执行文件时通常会 pop 此错误,反之亦然,这对我而言并非如此。
这是
file
和uname
命令的输出:$ file myexit
myexit: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
$ uname -a
Linux user 2.6.35-28-generic #50trisquel2-Ubuntu SMP Tue May 3 00:54:52 UTC 2011 i686 GNU/Linux
有人可以帮助我了解这里到底出了什么问题吗?谢谢。
最佳答案
.section text
是不正确的,当您需要将代码放入
text
部分时,会创建一个名为.text
的部分。替换为:.data
.text
.globl _start
_start:
...