问题描述
我将分解下一个简单的来源:
#include <stdio.h>
void func3() {
int i = 11;
printf("\t\t\t[in func3] i = %d\n",i);
}
void func2() {
int i = 7;
printf("\t\t[in func2] i = %d\n",i);
func3();
printf("\t\t[back in func2] i = %d\n",i);
}
void func1() {
int i = 5;
printf("\t[in func1] i = %d\n",i);
func2();
printf("\t[back in func1] i = %d\n",i);
}
int main() {
int i = 3;
printf("[in main] i = %d\n",i);
func1();
printf("[back in main] i = %d\n",i);
}
依次中断gdb
:main
然后func1
:
Breakpoint 2,func1 () at /home/storenth/scope.c:16
16 int i = 5;
(gdb) i r rbp rsp
rbp 0x7fffffffda50 0x7fffffffda50
rsp 0x7fffffffda40 0x7fffffffda40
(gdb) x/4x 0x7fffffffda50
0x7fffffffda50: 0x00007fffffffda70 0x0000555555554731
0x7fffffffda60: 0x00007fffffffdb50 0x0000000300000000
(gdb) x/4x 0x7fffffffda40
0x7fffffffda40: 0x00007ffff7de59f0 0x0000000000000000
0x7fffffffda50: 0x00007fffffffda70 0x0000555555554731
(gdb) nexti
17 printf("\t[in func1] i = %d\n",i);
(gdb) x/4x 0x7fffffffda40
0x7fffffffda40: 0x00007ffff7de59f0 0x0000000500000000
0x7fffffffda50: 0x00007fffffffda70 0x0000555555554731
(gdb) x/4xw 0x7fffffffda40
0x7fffffffda40: 0xf7de59f0 0x00007fff 0x00000000 0x00000005
(gdb) x/x 0x00007ffff7de59f0
0x7ffff7de59f0 <_dl_fini>: 0xe5894855
因此,由于变量0x5
,我希望在当前堆栈帧中仅能在RSP下看到int i = 5;
,但也会得到0x00007ffff7de59f0
,它使我指向<_dl_fini>:0xe5894855
。
- 我的推理哪里错了?
- 什么是
<_dl_fini>
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)