公告
财富商城
积分规则
提问
发文
2018-12-31 02:16发布
一个人的天荒地老
I came across a reference to it recently on proggit and (as of now) it is not explained.
I suspect this might be it, but I don't know for sure.
Using LD_PRELOAD path, you can force the application loader to load provided shared object, over the default provided.
LD_PRELOAD
Developers uses this to debug their applications by providing different versions of the shared objects.
We've used it to hack certain applications, by overriding existing functions using prepared shared objects.
As many people mentioned, using LD_PRELOAD to preload library. BTW, you can CHECK if the setting is available by ldd command.
ldd
Example: suppose you need to preload your own libselinux.so.1.
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)
Thus, set your preload environment:
export LD_PRELOAD=/home/patric/libselinux.so.1
Check your library again:
>ldd /bin/ls ... libselinux.so.1 => /home/patric/libselinux.so.1 (0x00007fb9245d8000) ...
Here is a detailed blog post about preloading:
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
If you set LD_PRELOAD to the path of a shared object, that file will be loaded before any other library (including the C runtime, libc.so). So to run ls with your special malloc() implementation, do this:
libc.so
ls
malloc()
$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
You can override symbols in the stock libraries by creating a library with the same symbols and specifying the library in LD_PRELOAD.
Some people use it to specify libraries in nonstandard locations, but LD_LIBRARY_PATH is better for that purpose.
LD_LIBRARY_PATH
it's easy to export mylib.so to env:
mylib.so
$ export LD_PRELOAD=/path/mylib.so $ ./mybin
to disable :
$ export LD_PRELOAD=
最多设置5个标签!
Using
LD_PRELOAD
path, you can force the application loader to load provided shared object, over the default provided.Developers uses this to debug their applications by providing different versions of the shared objects.
We've used it to hack certain applications, by overriding existing functions using prepared shared objects.
As many people mentioned, using
LD_PRELOAD
to preload library. BTW, you can CHECK if the setting is available byldd
command.Example: suppose you need to preload your own
libselinux.so.1
.Thus, set your preload environment:
Check your library again:
Here is a detailed blog post about preloading:
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
If you set
LD_PRELOAD
to the path of a shared object, that file will be loaded before any other library (including the C runtime,libc.so
). So to runls
with your specialmalloc()
implementation, do this:You can override symbols in the stock libraries by creating a library with the same symbols and specifying the library in
LD_PRELOAD
.Some people use it to specify libraries in nonstandard locations, but
LD_LIBRARY_PATH
is better for that purpose.it's easy to export
mylib.so
to env:to disable :