시스템에 라이브러리가 없으면 ldd가 위치를 표시하지 않습니다.

시스템에 라이브러리가 없으면 ldd가 위치를 표시하지 않습니다.

나는 신중하게 선택된 프로그램에 액세스할 수 있지만 시스템의 나머지 부분과 완전히 격리된 chroot 환경을 만들고 싶습니다.

bin이 chroot 폴더에 , lib, 3개의 폴더를 만들었습니다 lib64. 그런 다음 실행 파일(이 경우 ) 을 /bin/bash에 복사했습니다 bin.ldd /bin/bash

linux-vdso.so.1 =>  (0x00007ffff01f6000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f35ed501000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f35ed2fd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f35ecf33000)
/lib64/ld-linux-x86-64.so.2 (0x00007f35ed72a000)

출력이 나오지 않는 경우를 제외하고 이 모든 라이브러리를 복사할 수 있습니다 linux-vdso.so.1.sudo find / -name "linux-vdso.so.1"

이제 어떻게 해야 하나요?

답변1

VDSO는 특별하며 커널에서 직접 제공됩니다.

파일 이름이 없어도 주소가 있는 것을 볼 수 있으므로 매핑이 잘 됩니다. VDSO를 chroot에 넣기 위해 아무 것도 할 필요가 없습니다.

커널 VDSO는 항상 모드 전환이 필요하지 않은 커널 기능 모음입니다. 예를 들어 정확한 타이머 읽기는 rdtsc이를 지원하는 프로세서의 어셈블리 명령에 의해 처리되고 이를 지원하지 않는 프로세서의 커널 시스템 호출에 의해 처리됩니다. 이것이 일반적인 시스템 호출이라면 최신 프로세서는 권한이 없는 단일 어셈블리 명령어의 시스템 호출 오버헤드를 처리해야 하며 rdtsc프로그램이 항상 인라인된 경우 더 이상 이전 시스템에서 실행되지 않습니다.

답변2

프로그램을 실행해 보세요 ;-)

linux-vdso.so.1가상 라이브러리는 커널에 의해 프로세스 주소 공간에 자동으로 매핑됩니까?vdso(7). 파일 시스템에는 존재하지 않습니다.

관련 정보