我目前正在尝试在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 此错误,反之亦然,这对我而言并非如此。

这是fileuname命令的输出:
$ 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:
  ...

10-07 17:37