Segfault при загрузке параметра функции в регистр - PullRequest
0 голосов
/ 03 февраля 2019

Я довольно новичок в сборке x86 и пытаюсь собрать программу hello world.Я пытаюсь создать подпрограмму, которая записывает один байт в стандартный вывод, но у меня возникла проблема.Строка mov ebx, [esp+1] (чтобы загрузить переданный байт, когда я вызываю подпрограмму) вызывает segfault.

Я попытался сохранить регистр ebx вместе с самим собой, чтобы убедиться, что он пуст, чтобы убедиться, чтото, что он не связывается с системным вызовом

_start:
    push 32h
    call _writeByte

    ; This just jumps to an exit routine
    jmp  _exit

_writeByte:
    ; This line causes the problem. If I remove it the program works fine
    mov  ebx, [esp+1]
    xor  ebx, ebx

    mov  eax, 1
    mov  edi, 1
    mov  esi, tmp
    mov  edx, 1
    syscall

    ret

Почему программа вызывает ошибки?

1 Ответ

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

Я нахожусь в режиме x64, и, как группа людей, предложенных в комментариях, использование mov ebx, [rsp+8] сработало, потому что esp - это только 4 младших байта регистра.

...