什么是PLT表?
PLT表(Procedure Link Table)是由代码片段组成的,每个代码片段都跳到GOT表中的一个具体的函数调用,进程链接表。
什么是GOT表?
GOT表(Global Offset Table)是一个存储外部库函数的表,全局偏移表。
PLT表和GOT表的关系
PLT表中的数据就是GOT表中的一个地址。
每一个PLT表的每一项都是对应相应的GOT表的每一项地址。
PLT表中的数据不是函数的真实地址,而是GOT表的地址,GOT表中的数据才是函数的真实地址。
通过PLT表T跳转到GOT表就可得到真实的函数地址。
如何利用PLT表和GOT表?
PLT表作为中间表链接call命令和GOT表,GOT表存的是函数的真实地址。
在一些pwn题中,要泄露出的目的函数地址一般是GOT表的内容,为了泄露出目的函数真实地址,往往需要用到read、write、put等函数,
通过这些已知的同时存在GOT表和libc中的函数地址,可以得出偏移量,然后通过偏移量就可以计算找到system(‘/bin/sh’)的真实地址。