本文为看雪论坛优秀文章
看雪论坛作者ID:Heavenml
在Linux平台下,elf文件中的got节和plt节在动态链接过程中起着非常重要的作用,学习got节和plt节是在学习elf文件格式过程中必不可少的一部分。所以在此笔记中,记录一下got节和plt节的原理。 got(全局偏移表)
got表是Linux平台用来解决对全局数据,外部函数引用的表,当在程序中引用外部的数据,函数时,通过got表来实现对相关数据符号的解析。
plt(过程链接表)在动态链接过程中, 函数在加载共享库之后,会对got节中的函数地址进行填充,所以,调用的时候利用plt跳转到got表中项指定的地址即可。
我们通过如下的两段代码,来学习got/plt的实现机制。
//foo.c//使用如下的编译命令编译生成foo.so//gcc -shared -fPIC foo.c foo.so extern int foo();extern int test;int foo(){
return test;} //main.c//使用如下的命令&#x