全局偏移表 (Global Offset Table GOT)
过程连接表(Procedure Linkage Table PLT)
PLT和GOT在动态链接时对地址重定位所需的
地址重定位类似于上学期操作系统学的虚拟内存
以一个简单的程序test.c为例

gdb 反汇编下test函数

发现在调用printf函数是用到了plt表
再查看printf函数

第一句跳转到当前eip+0x2fe2处
当前的eip为0x1036,计算得跳转地址为0x4018,与注释一致,再看0x4018里放的地址

发现又跳回了printf函数的第二步,现在有了疑问,函数执行过程为什么要兜一个大圈子?
继续看下去

跳转到0x4010便是该函数的got.plt位置
而got.plt就是用来保存函数引用的地址
函数第一次调用过程

函数之后调用过程

https://www.jianshu.com/p/0ac63c3744dd
https://www.cnblogs.com/pannengzhi/p/2018-04-09-about-got-plt.html
https://www.freebuf.com/articles/system/135685.html