Han*_*Gay 321 c linux environment-variables
我最近在proggit上看到了它的引用,并且(截至目前)它没有被解释.
我怀疑这可能是它,但我不确定.
Jes*_*erE 389
如果设置LD_PRELOAD为共享对象的路径,则该文件将在任何其他库(包括C运行时libc.so)之前加载.因此,要运行ls您的特殊malloc()实现,请执行以下操作:
$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
Run Code Online (Sandbox Code Playgroud)
Jos*_*hua 46
您可以通过创建具有相同符号的库并在其中指定库来覆盖库存库中的符号LD_PRELOAD.
有些人用它来指定非标准位置的库,但LD_LIBRARY_PATH更适合这个目的.
Ron*_*del 33
有了LD_PRELOAD你可以给图书馆的优先级.
例如,您可以编写一个实现malloc和的库free.并通过与装载这些LD_PRELOAD你malloc并free会被执行,而不是标准的.
Pat*_*ric 23
正如很多人提到的,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)
Run Code Online (Sandbox Code Playgroud)
因此,设置预加载环境:
export LD_PRELOAD=/home/patric/libselinux.so.1
Run Code Online (Sandbox Code Playgroud)
再次检查你的图书馆:
>ldd /bin/ls
...
libselinux.so.1 =>
/home/patric/libselinux.so.1 (0x00007fb9245d8000)
...
Run Code Online (Sandbox Code Playgroud)
LD_PRELOAD列出具有覆盖标准集的函数的共享库,就像那样/etc/ld.so.preload.这些是由加载器实现的/lib/ld-linux.so.如果要覆盖几个选定的函数,可以通过创建覆盖对象文件和设置来完成此操作LD_PRELOAD; 此对象文件中的函数将仅覆盖那些将其他函数保留原样的函数.
有关共享库的更多信息,请访问 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
导出mylib.so到环境:
$ export LD_PRELOAD=/path/mylib.so
$ ./mybin
Run Code Online (Sandbox Code Playgroud)
要禁用它:
$ unset LD_PRELOAD
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
286882 次 |
| 最近记录: |