LD_PRELOAD 트릭은 무엇입니까?
-
06-07-2019 - |
해결책
설정하면 LD_PRELOAD
공유 객체의 경로에 해당 파일이로드됩니다. ~ 전에 다른 도서관 (C 런타임 포함, libc.so
). 그래서 달리기 ls
당신의 특별한 malloc()
구현, 이것을 수행합니다.
$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
다른 팁
동일한 기호가있는 라이브러리를 만들고 라이브러리를 지정하여 스톡 라이브러리의 기호를 대체 할 수 있습니다. LD_PRELOAD
.
어떤 사람들은이를 사용하여 비표준 위치에 라이브러리를 지정하지만 LD_LIBRARY_PATH
그 목적으로 더 좋습니다.
와 함께 LD_PRELOAD
라이브러리를 우선시 할 수 있습니다.
예를 들어 구현하는 라이브러리를 쓸 수 있습니다 malloc
그리고 free
. 그리고 이것들을로드함으로써 LD_PRELOAD
당신의 malloc
그리고 free
표준보다는 실행됩니다.
많은 사람들이 언급했듯이 사용합니다 LD_PRELOAD
사전로드 라이브러리. BTW, 당신은 할 수 있습니다 확인하다 설정을 사용할 수있는 경우 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)
...
LD_PRELOAD
표준 세트를 재정의하는 기능이있는 공유 라이브러리를 나열합니다. /etc/ld.so.preload
하다. 이들은 로더에 의해 구현됩니다 /lib/ld-linux.so
. 선택한 몇 가지 함수 만 재정의하려면 오버링 객체 파일을 만들고 설정하여이를 수행 할 수 있습니다. LD_PRELOAD
; 이 객체 파일의 함수는 다른 기능을 남겨 두는 기능 만 무시합니다.
공유 도서관에 대한 자세한 내용은 방문하십시오 http://tldp.org/howto/program-library-howto/shared-libraries.html
수출하기 쉽습니다 mylib.so
Env :
$ export LD_PRELOAD=/path/mylib.so
$ ./mybin
비활성화하려면 :
$ export LD_PRELOAD=
예압에 대한 자세한 블로그 게시물은 다음과 같습니다.
사용 LD_PRELOAD
경로, 제공된 공유 객체를 제공 한 기본값 위로 제공 한 공유 객체를로드하도록 강제로 강제로 제공 할 수 있습니다.
개발자는이를 사용하여 다양한 버전의 공유 객체를 제공하여 응용 프로그램을 디버깅합니다.
준비된 공유 객체를 사용하여 기존 기능을 재정의하여 특정 응용 프로그램을 해킹하는 데 사용했습니다.
LD_PRELOAD가 사용될 때 해당 파일은 다른 어느 전에도로드됩니다.$export LD_PRELOAD=/path/lib
미리로드되는 lib, 이것조차도 프로그램에도 사용될 수 있습니다.