我最近在proggit上看到了它的引用,并且(截至目前)它没有被解释。
我怀疑这可能是它,但我不确定。
#1楼
LD_PRELOAD
列出了包含覆盖标准集的函数的共享库,就像/etc/ld.so.preload
那样。 这些是由loader /lib/ld-linux.so
实现的。 如果要仅覆盖几个选定的函数,可以通过创建重写对象文件并设置LD_PRELOAD
来完成此操作; 此对象文件中的函数将仅覆盖那些将其他函数保留原样的函数。
有关共享库的更多信息,请访问http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
#2楼
将mylib.so
导出到env很容易:
$ export LD_PRELOAD=/path/mylib.so
$ ./mybin
禁用:
$ export LD_PRELOAD=
#3楼
这是一篇关于预加载的详细博客文章:
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
#4楼
使用LD_PRELOAD
路径,可以强制应用程序加载器加载提供的共享对象,超过默认提供的。
开发人员通过提供不同版本的共享对象来使用它来调试其应用程序。
我们使用它来破解某些应用程序,通过使用准备好的共享对象覆盖现有函数。
#5楼
正如很多人提到的,使用LD_PRELOAD
来预加载库。 顺便说一句,您可以通过ldd
命令检查设置是否可用。
示例:假设您需要预加载自己的libselinux.so.1
。
> ldd /bin/ls
...
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3927b1d000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3927914000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f392754f000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3927311000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f392710c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3927d65000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3926f07000)
因此,设置预加载环境:
export LD_PRELOAD=/home/patric/libselinux.so.1
再次检查你的图书馆:
>ldd /bin/ls
...
libselinux.so.1 =>
/home/patric/libselinux.so.1 (0x00007fb9245d8000)
...
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3197420