Невозможно найти символ записи _start (NASM, ld, ELF64).Linux

Ответить
Anonymous
 Невозможно найти символ записи _start (NASM, ld, ELF64).

Сообщение Anonymous »

Я следую руководству по сборке, чтобы изучить NASM, но не могу заставить ld работать.
Это 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»