Это main.asm:
Код: Выделить всё
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov rdx, len ;message length
mov rcx, msg ;message to write
mov rbx, 1 ;fd to use is stdout
mov rax, 4 ;sys_write
int 0x80 ;call kernel
mov rax, 1 ;sys_exit
int 0x80 ;call kernel
section .data
msg db 'Hello world!', 0xa
len equ $ - msg ;length of the string
nasm -f elf64 main.asm && ld -o main main.o && ./main
Что выводит:
ld: предупреждение: невозможно найти символ записи _start; не задан начальный адрес
./run.sh: строка 1: ./main: невозможно выполнить двоичный файл: ошибка формата Exec
Я пробовал использовать GCC, но получаю та же проблема, за исключением того, что вместо _start используется main.
Подробнее здесь: https://stackoverflow.com/questions/789 ... m-ld-elf64
Мобильная версия