2013-08-21 1 views
10

누군가 ldd 명령의 출력을 설명 할 수 있습니까?ldd 출력에 대한 설명

$ ldd /bin/date 
    linux-vdso.so.1 => (0x00007fff6ffff000) 
    librt.so.1 => /lib64/librt.so.1 (0x00007f54ba710000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f54ba384000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f54ba167000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f54ba919000) 

(젠투 시스템) 다음 예제에서는 첫 번째 줄은 무엇을 의미합니까? "linux-vdso.so.1 => (0x00007fff6ffff000)"=는 공유 라이브러리 파일을 가리 키지 않습니다.

+0

가능한 [ldd 출력 이해] (http://stackoverflow.com/questions/5554343/understanding-ldd-output) –

답변

12

출력의 가장 중요한 부분은 linux-vdso입니다. VDSO는 Virtual Dynamic Shared Object을 나타냅니다. 커널 공간 루틴을 사용자 공간으로 내보내는 방법입니다. 주된 이유는 시스템 호출 오버 헤드를 줄이는 것입니다. 일반적으로 시스템 호출이 발생하면 사용자 모드에서 커널 모드로 전환하는 것과 같은 비싼 작업이 필요합니다. 이러한 종류의 오버 헤드를 줄이기 위해 vdso 메모리 공간 결과를 추출하여 VDSO를 사용합니다. 실제 시스템 호출없이 gettimeofday()를 할 수 있습니다!

모든 시스템 호출에는 VDSO가 지원되지 않으며 getcpu(), gettimeofday(), time() 등과 같은 시스템 호출 만 수행되는 것은 아닙니다. 이러한 작업을 수행하는 매우 빠른 방법입니다. 또한 메모리 주소 linux-vdso.so.1 포인트는 다른 ldd 호출에서 무작위로 지정됩니다. linux-vdso.so.1이 다른 메모리 위치를 가리키는 것을 볼 수 있습니다. 아무도 앞에서 주소를 예측할 수없는 것처럼 완료되었습니다.