Я делаю небольшую программу "Hello World" в NASM для запуска на моей машине с Ubuntu (вывод uname -a включен ниже):
$uname -a
Linux desk069 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Теперь, после сохранения этого файла, я имеюзапустить
nasm -f elf64 ./test. ./test.nasm -o test.o
ld -o test test.o -m elf_x86_64
Для того, чтобы мой код работал. Попытка запустить test.o
дает мне
bash: ./test.o: cannot execute binary file: Exec format error
, а попытка заставить NASM сгенерировать bin-файл дает мне:
$nasm -f bin ./test.nasm -o test.bin
$chmod +x ./test.bin
$./test.bin
bash: ./test.bin: cannot execute binary file: Exec format error
У меня вопрос, я не использую никаких библиотек. Почему я должен использовать компоновщик ld? Что именно не так с файлом bin? Могу ли я что-то сделать, чтобы он работал без ld
?
Мой код указан ниже.
section .text
global _start
section .data
msg db 'Hello, world!', 0xa
len equ $- msg
section .text
_start:
mov edx, len
mov ecx, msg
mov ebx, 1
mov eax, 4
int 0x80
mov ebx, 0
mov eax, 1
int 0x80