LD_PRELOAD 트릭이란 무엇입니까?
나는 최근에 그것에 대한 언급을 우연히 발견했는데 (현재로서는) 설명되지 않는다.
이게 아닐까 하는 생각이 들지만, 확실히는 모르겠어요.
설정했을 경우LD_PRELOAD
공유 객체의 경로에 해당 파일이 다른 라이브러리보다 먼저 로드됩니다(C 런타임 포함).libc.so
실행 방법ls
특집으로malloc()
구현, 다음을 수행합니다.
$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls
많은 분들이 언급하셨듯이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)
...
동일한 기호로 라이브러리를 만들고 에서 라이브러리를 지정하여 주식 라이브러리의 기호를 재정의할 수 있습니다.LD_PRELOAD
.
일부 사용자는 표준이 아닌 위치에서 라이브러리를 지정하기 위해 이 도구를 사용합니다.LD_LIBRARY_PATH
그게 더 좋은 것 같아요.
와 함께LD_PRELOAD
라이브러리에 우선순위를 부여할 수 있습니다.
예를 들어, 다음을 구현하는 라이브러리를 작성할 수 있습니다.malloc
그리고.free
그리고 이것들을 로딩함으로써LD_PRELOAD
당신의.malloc
그리고.free
표준이 아닌 실행이 됩니다.
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
비활성화하려면:
$ unset LD_PRELOAD
사용.LD_PRELOAD
path를 지정하면 애플리케이션 로더가 지정된 공유 개체를 지정된 기본값보다 강제로 로드할 수 있습니다.
개발자는 이를 사용하여 다른 버전의 공유 개체를 제공하여 응용 프로그램을 디버깅합니다.
준비된 공유 객체를 사용하여 기존 기능을 무시함으로써 특정 애플리케이션을 해킹하는 데 사용되었습니다.
LD_PRELOAD를 사용하면 해당 파일이 다른 파일보다 먼저 로드됩니다.사용하다$export LD_PRELOAD=/path/lib
프리로드되는 lib는 프리 로드됩니다.이것은 프로그램에서도 사용할 수 있습니다.
다음은 프리로드에 대한 자세한 블로그 게시물입니다.
https://blog.cryptomilk.org/2014/07/21/what-is-preloading/
언급URL : https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick
'itsource' 카테고리의 다른 글
Visual Studio에서의 C 프로그래밍 (0) | 2022.07.17 |
---|---|
Vue 클래스 구성 요소, Vuex 클래스를 사용하는 경우의 ESLint 오류 (0) | 2022.07.17 |
EOF 시뮬레이션 방법 (0) | 2022.07.17 |
Vuex를 통한 양방향 데이터 바인딩 (0) | 2022.07.17 |
VueJ: v-model과 :value를 동시에 사용 (0) | 2022.07.17 |