为什么堆栈顶部包含<_dl_fini>的地址?

问题描述

我将分解下一个简单的来源:

#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);
}

依次中断gdbmain然后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

  1. 我的推理哪里错了?
  2. 什么是<_dl_fini>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...