Пытаюсь скомпилить в убунте 64 следующий код:
section .text
global _start ; необходимо для линкера (ld)
_start: ; сообщает линкеру стартовую точку
mov edx,len ; длина строки
mov ecx,msg ; строка
mov ebx,1 ; дескриптор файла (stdout)
mov eax,4 ; номер системного вызова (sys_write)
int 0x80 ; вызов ядра
mov eax,1 ; номер системного вызова (sys_exit)
int 0x80 ; вызов ядра
section .data
msg db 'Hello, world!', 0xa ; содержимое строки для вывода
len equ $ - msg ; длина строки
$ nasm -f elf64 hello.asm
$ ld -m elf_x86_64 -s -o hello hello.o
$ ./hello
Segmentation fault (core dumped)
Если собрать для elf_i386:
bash: ./hello: cannot execute binary file: Exec format error
Я что-то делаю не так? Или код кривой? Взял его отсюда https://ravesli.com/assembler-bazovyj-sintaksis/