GOT表和PLT表

GOT表和PLT表

GOT(Global Offset Table)全局偏移表,PLT(Procedure Linkage Table)程序链接表。下面我们来分析分析这些表的作用。

下面为一段测试的C语言代码

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>

int main()
{
puts("Hello world!");
exit(0);
}

将源代码编译

1
gcc  -g -o plt plt.c

运行程序成功

下面打开我们的gdb调试神器进行main函数对其进行调试

然后进入puts函数

可以看到有三条指令,第一条是跳转,第二条是压栈,第三条是跳转

第一条指令是跳转到0x4000地址处,可以看到为puts@got.plt,则表示puts@plt先去puts@got.plt中找地址,继续下一步,直接跳转到下一条指令,因为got.plt里面没有puts的地址,需要使用链接触发找到地址;如果找的到地址的话,就去执行函数。

大致过程如下

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信