Я хотел бы понять, как работает стек.Я использую GDB, чтобы разобрать мой код.
Я разбираю следующий код:
int main(){
char*buf;
buf="TEST";
return 0;
}
После компиляции я запускаю gdb и разбираю код.Я получил такой результат:
0x080483db <+0>: push %ebp
0x080483dc <+1>: mov %esp,%ebp
0x080483de <+3>: sub $0x10,%esp
0x080483e1 <+6>: movl $0x8048470,-0x4(%ebp)
0x080483e8 <+13>: mov $0x0,%eax
0x080483ed <+18>: leave
0x080483ee <+19>: ret
Я установил точку останова по инструкции 0x080483e8, затем я запускаю.
Когда я печатаю значение по адресу 0x8048470
, я получаю TEST\n
, но не получаю тот же результат, когда выполняю команду x\s $ebp-0x4
.Поскольку содержимое 0x8048470
было перемещено в -0x4(%ebp)
, я не должен получить одинаковое значение на обоих адресах?