bash, не могу выполнить двоичный файл - PullRequest
2 голосов
/ 08 января 2012

Я сейчас пытаюсь изучить ассемблер на своем дистрибутиве 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

Я не уверен, что именно здесь происходит. После поиска вокруг, кажется, что эта ошибка обычно появляется при попытке выполнить 32-битный исполняемый файл в 64-битной ОС или наоборот, что не так для меня.

Вот вывод команд 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

Может кто-нибудь помочь мне понять, что именно здесь происходит не так? Спасибо.

1 Ответ

4 голосов
/ 08 января 2012
.section text

неверно, это создает раздел с именем text, когда вам нужно, чтобы ваш код был в разделе .text.Замените это на:

.data

.text
.globl _start
_start:
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...