步骤 1
Section outline
-
首先,我们观察这些环境变量在运行普通程序时如何影响动态加载器/链接器的行为。请按照以下步骤操作:
- 构建一个动态链接库。创建以下程序,命名为 mylib.c。该程序覆盖了 libc 中的 sleep() 函数:
#include <stdio.h> void sleep (int s) { /* 如果这是由特权程序调用的, 你可以在这里造成破坏! */ printf("我不会睡觉!\n"); }
- 使用以下命令编译上述程序:
$ gcc -fPIC -g -c mylib.c $ gcc -shared -o libmylib.so.1.0.1 mylib.o -lc
- 设置 LD_PRELOAD 环境变量:
$ export LD_PRELOAD=./libmylib.so.1.0.1
- 最后,编译以下程序 myprog,并放置在与上述动态链接库 libmylib.so.1.0.1 相同的目录中:
/* myprog.c */ #include <unistd.h> int main() { sleep(1); return 0; }