动态加载过程与 PLT、GOT 表
(TODO 补充关于编译时重定位、运行时重定位、PLT/GOT 表的背景知识)
本文将展示动态加载的过程,相关函数的地址如何在运行时被重定位,以及 PLT/GOT 表在其中的发挥的作用。以下面这段代码为例:
1#include <stdio.h> 2 3int main() 4{ 5 printf("Hey man!\n"); 6 return 0; 7} 编译 之前着实没想到,为了更好地展现 PLT/GOT 的过程,要在编译这块做这么多额外工作。
首先要添加 -fno-pie 和 -no-pie 两个选项,否则 GOT 里的函数地址会在 main() 执行前就被调整好,原本的过程就体现不出来了。这是从这 …