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;
    }