GOT表是程序中的一个section,负责存放动态链接的函数地址,除非被标记为Full RELRO (GCC默认采用Partial RELRO),函数地址的解析在他们第一次被调用时才进行。
程序要调用某个动态链接的函数,这个函数的地址就是从GOT表中取的
而在函数未被解析时,GOT表内存放的是PLT表的某一项的地址,PLT表实际上是一些小代码片段,它负责解析我们的函数地址(调用动态链接器,提供其需要解析的函数名),放回GOT表中,下一次再从GOT表中取地址调用函数时就直接跳到真实的函数地址,而不会再经过PLT代码片段。
网友评论