bash,无法执行二进制文件

时间:2012-01-08 19:15:30

标签: linux ubuntu assembly

我目前正在尝试在我的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位操作系统上执行32位可执行文件时会弹出此错误,反之亦然,这对我来说并非如此。

以下是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

有人可以帮我理解这里到底出了什么问题吗?感谢。

1 个答案:

答案 0 :(得分:4)

.section text

不正确,当您需要将代码放在text部分时,会创建一个名为.text的部分。将其替换为:

.data

.text
.globl _start
_start:
  ...