2013-08-21 11 views
10

Qualcuno può spiegarmi l'output del comando ldd? Nell'esempio seguente (sul sistema Gentoo)Spiegazione dell'uscita 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) 

cosa significa la prima linea? "Linux-vdso.so.1 => (0x00007fff6ffff000)" The => non punta a nessun file di libreria condivisa.

+0

possibile duplicato di [Informazioni su output ldd] (http://stackoverflow.com/questions/5554343/understanding-ldd-output) –

risposta

12

La parte più importante di tale output è linux-vdso. VDSO sta per Virtual Dynamic Shared Object - è un modo per esportare le routine dello spazio del kernel nello spazio utente. Il motivo principale è ridurre il sovraccarico della chiamata di sistema. In genere quando si verifica una chiamata di sistema richiede alcune operazioni costose come la modalità di passaggio da utente a kernel, copia dei dati da spazio utente a kernelspace ecc. Per ridurre questi tipi di VDSO overhead viene utilizzato, semplicemente leggendo che il risultato dello spazio di memoria vdso potrebbe essere estratto cioè è possibile gettimeofday() senza fare una vera chiamata di sistema!

Nota, non tutte le chiamate di sistema hanno il supporto VDSO, solo le chiamate di sistema come getcpu(), gettimeofday(), time() ecc., Che è un modo estremamente veloce per fare queste cose. Anche i punti linux-vdso.so.1 dell'indirizzo di memoria sono randomizzati, su differenti invocazioni di ldd vedrai che linux-vdso.so.1 punta a una diversa posizione di memoria. Questo è stato fatto come se nessuno potesse prevedere l'indirizzo in anticipo.