跳转至

GOT

全称: Global Offset Table.

ELF 中的动态链接函数的地址是在运行时确定的, 第一次执行函数前会先通过动态解析器 (dynamic resolver) 解析获得函数的地址, 然后将结果缓存在 GOT 中.
由于程序可能存在大量动态函数, 若在一开始就对全部函数进行解析将耗费不少时间, 而且最终可能只有一部分动态函数被使用到, 因此 ELF 使用了延迟绑定的方法, 只在动态函数被调用前才进行绑定.

GOT 是在运行时不断完善的, 所以该表是可写的.
如果该程序被标记为 full RELRO, GOT 将是只读的, 否则这些解析工作是惰性的. 可以使用 readelfchecksec 判断程序是否是 full RELRO 的.

参考

评论