0%

understand-got-and-plt

理解动态链接elf以及实现,重要的两个表

  1. GOT - Global Offset Table 全局偏移表用于记录在 ELF 文件中所用到的共享库中符号的绝对地址
  2. PLT - Procedure Linkage Table 过程链接表的作用是将位置无关的符号转移到绝对地址

libc.so

在 Linux 中,常用的 C 语言库运行库 glibc 动态链接形式保存在”/lib”目录下,文件名叫做“libc.so”, 整个系统只保留一份 C 语言库的动态链接文件“libc.so”,而所有的 C 语言编写的、动态链接的程序都可以在运行时使用它。

动态链接

为了解决静态链接空间浪费和更新困难的问题,设计了动态链接,也就是说,把链接这个过程推迟到了运行时再进行,这就是动态链接的基本思想。

动态链接是把链接的过程从本来的程序被装载前推迟到了装载的时候。

这样做虽然很灵活,但是性能受到影响。

这就引出了动态链接的优化方法。

  • 装载时重定向
  • 地址无关代码

常用命令

readelf -S test.so
readelf -r test.so
objdump -R test.so
objdump -h test,so

Ref

  1. 通过 GDB 调试理解 GOT/PLT
  2. 深入了解 GOT,PLT 和动态链接
  3. 浅析 ELF 中的 GOT 与 PLT
  4. ELF_Format
  5. GOT 表和 PLT 表