LD_PRELOAD用于指定提前加载一些动态库,这些动态库比libc.so等库装载更早,它们提供的函数能够屏蔽后加载的动态库中的函数。这个特性可以方便地用来截获库函数调用。
例如,有一个已经编译好的程序使用malloc分配内存,你想使用Google开发的tcmalloc来提升效率,使用LD_PRELOAD可以实现这个目的。
下面举一个小例子来说用LD_PRELOAD的使用。
源文件
1 |
|
1 |
|
运行
首先,使用普通方法运行。
1 | gcc test.c -o test |
程序输出:
1 | start. |
接下来,讲malloc.c编译成动态链接库
1 | gcc -fPIC -shared malloc.c -o malloc.so |
程序输出:
1 | start. |
可以看出,使用LD_PRELOAD之后,我们自定义的malloc取代了库函数中的malloc。