PLT、GOT等运行时链接用到的读写段:
PLT是进程链接表,其中会存放一些代码,名称以@plt结尾。可以用于解析来自外部动态链接库的函数符号,例如printf@plt用可以确定printf的确切位置。
动态链接库需要有能力加载在任何虚拟地址,因此绝对地址经常不可行,所以需要动态链接库中用到位置无关代码。GOT是全局偏移量表,用于确定位置无关代码中符号的地址,将由链接器在动态链接时填入。.got.plt则是.plt段的全局偏移量表。
用户程序中,链接器会预先加载来自动态链接库的变量。当调用动态链接库函数时,将执行.plt段中对应的代码,如果是第一次调用,PC会跳转至一个预定义的函数_dl_runtime_resolve,它将通过链接器完成.got.plt表中内容的填充,使得之后的调用时PC直接跳转到动态链接库的函数。
原文章:https://www.cnblogs.com/pannengzhi/p/2018-04-09-about-got-plt.html