Мне нужно работать с x86 для домашнего задания. Я продолжаю получать этот segfault для вызова atoi, но я не уверен, почему это происходит. Это код:
addl $4, %eax
movl (%eax), %eax
movl %eax, (%esp)
call atoi
Где $eax прямо перед "call atoi" равно "11". Чтобы доказать это, это то, что я получаю в gdb прямо перед вызовом.
x/s $eax
0xffffd658: "11"
Я предполагаю, что мой большой вопрос заключается в том, что должно храниться в регистре $eax перед «вызовом atoi» и что должно храниться в $eax для программы, чтобы затем выполнить segfault в «вызове atoi»?
РЕДАКТИРОВАТЬ: Кто-то попросил регистры.
(gdb) x/s $eax
0xffffd658: "11"
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x2aaaaaa3 in ?? ()
(gdb) inf r
eax 0x0 0
ecx 0x2aaaaaab 715827883
edx 0x0 0
ebx 0x2c3ff4 2899956
esp 0xffffd458 0xffffd458
ebp 0x80484ef 0x80484ef
esi 0x0 0
edi 0x0 0
eip 0x2aaaaaa3 0x2aaaaaa3
eflags 0x10287 [ CF PF SF IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
(gdb)