RUNPATH
동적 종속성을 위해 ELF 변수를 실험하고 있습니다 . 도중에 bash
변경된 바이너리 복사본을 얻었고 이를 RUNPATH
실행하면 다음이 반환됩니다.ldd
$ ldd ./bash
linux-vdso.so.1 => (0x00007ffe6bdf9000)
libtinfo.so.5 (0x00007fbf8b97c000)
libdl.so.2 (0x00007fbf8b776000)
libc.so.6 (0x00007fbf8b3a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbf8bba7000)
RUNPATH
-- 종속성(내 사용자 정의에서 ) 에 대한 경로가 없는 이유는 무엇입니까 ? not found
이는 무엇을 의미합니까?
내 추측은 다음과 같습니다:
ldd
파일을 찾을 수 없지만 메모리에 있고(괄호 안의 숫자는 주소입니다) ldd
현금 메커니즘을 통해 어떻게든 파일에 대해 알게 됩니다. 맞습니까? 그런데 왜 ldd
파일을 찾지 못하는 걸까요? 에서 가져오는 데 실패하면 RUNPATH
표준 디렉터리로 진행해야 합니다. 그렇죠?
업데이트
오늘은 파일을 찾습니다(그래서 어제는 현금이었나요?).
$ cd dir_chroot2/
$ ldd ./bash
linux-vdso.so.1 => (0x00007ffed3530000)
libtinfo.so.5 => /home/.../dir_chroot2/./libtinfo.so.5 (0x00007f72c14a8000)
libdl.so.2 => /home/.../dir_chroot2/./libdl.so.2 (0x00007f72c12a1000)
libc.so.6 => /home/.../dir_chroot2/./libc.so.6 (0x00007f72c0ed0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f72c16d4000)
- 바이너리와 그 위의 모든 라이브러리 ld-linux-x86-64.so.2
에는 . 왜 그래야만하지? 어떻게 든 연결됩니까?bash
RUNPATH=$ORIGIN/
linux-vdso.so.1