LD_PRELOAD 트릭은 무엇입니까?
나는 최근에 proggit 에서 그것에 대한 언급을 보았 으며 (현재로서는) 설명되어 있지 않습니다.
나는 이것이 아마도 의심 하지만 확실하지 않습니다.
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=
사전로드에 대한 자세한 블로그 게시물은 다음과 같습니다.
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
LD_PRELOAD
경로를 사용 하면 응용 프로그램 로더가 제공된 기본값보다 제공된 공유 오브젝트를 강제로로드 할 수 있습니다.
개발자는이를 사용하여 다른 버전의 공유 객체를 제공하여 응용 프로그램을 디버깅합니다.
준비된 공유 객체를 사용하여 기존 기능을 재정 의하여 특정 응용 프로그램을 해킹하는 데 사용했습니다.
LD_PRELOAD가 사용될 때, 그 파일은 $export LD_PRELOAD=/path/lib
미리로드 될 다른 lib 보다 먼저로드 될 것입니다 . 심지어 이것도 프로그램에서도 사용될 수 있습니다
참고 URL : https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick
'Programing' 카테고리의 다른 글
실용적인 비 이미지 기반 보안 문자 접근 방식? (0) | 2020.03.08 |
---|---|
git에서 전체 태그와 함께 모든 태그를 나열하는 방법은 무엇입니까? (0) | 2020.03.08 |
PostgreSQL은 데이터베이스를 어디에 저장합니까? (0) | 2020.03.08 |
LaTeX에서 변수를 정의 할 수있는 방법이 있습니까? (0) | 2020.03.08 |
특성과 인터페이스 (0) | 2020.03.07 |