我想了解堆栈的工作原理。 我正在使用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)
,两个地址是否应获得相同的值?