简单描述ELF动态链接重定位的延迟绑定以及GOT表、PLT表的意义

    技术2022-07-11  114

    GOT表

            GOT表(Global Offset Table) ,又称全局偏移表,位于.data节首,记录着外部符号动态加载后的首地址信息。在静态链接时,每一个外部符号都会在GOT表对应一个表项,静态链接器并每一个表项生成一个对应的重定位项(数据位于.rel.data节,函数位于.rel.text节)。在动态加载时,动态链接器将根据重定位项,修改对应的GOT表中信息,完成重定位。

             在访问动态库数据或调用动态库函数时,直接通过相对位移,找到对应的GOT表项,然后根据GOT表项中记录的目标地址信息访问数据或调用函数,从而实现动态加载。

    举例说明:

    extern int b; extern void ext(); int main() { ext(); }

    汇编伪代码如下:

    0000050c <main>: 0000050c: 55 pushl %ebp .... 00000557: e8 00 00 00 00 call 0000055c 0000055c: 5b popl %ebx 0000055d: addl $0x1204, %ebx 0000055e: call *(%ebx)

              通过这种方式,可以发现在调用函数时多使用了三条指令,并多使用了一个

    转载请注明原文地址:https://ipadbbs.8miu.com/read-10916.html
    最新回复(0)