Программа сборки дает мне segfault - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь написать компилятор, но я не очень хорош в этом.Он компилируется / собирается без каких-либо ошибок, но он дает мне segfault во время выполнения.

Вот как я собираю исходный код моей сборки (в Linux Ubuntu):

nasm -f elf64 assembly.asm
ld -s -o assembly assembly.o --entry entrypoint
./assembly ; echo $?

Вот мой источник сборкикод:

global entrypoint
entrypoint:
    call main 
main:
    mov eax, 0
    ret

Вот что мне это дает:

Segmentation fault      (core dumped) ./assembly

1 Ответ

0 голосов
/ 16 февраля 2019

После того, как ret возвращается после call main, управление завершается инструкцией после call, что снова является началом main.После выполнения команды mov во второй раз, следующий - снова ret, но теперь нет соответствующего call, в результате чего указатель инструкции указывает на те байты, которые только что оказались в стеке.Это почти наверняка не будет исполнимой памятью, поэтому при попытке выполнения там возникает ошибка.

...