Я сейчас пытаюсь изучить ассемблер на своем дистрибутиве 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
Может кто-нибудь помочь мне понять, что именно здесь происходит не так? Спасибо.