Domanda

C'è un modo semplice ed efficace per sapere che un dato ELF collegato dinamicamente manca un necessario .so per l'esecuzione, tutti dalla all'interno di un programma C / C ++?

Ho bisogno di un programma con funzionalità in qualche modo simile come ldd, senza cercare di eseguire il ELF per scoprire le (TEM / insoddisfatta) dipendenze nel sistema. Forse chiedendo l'utilità ld-linux.so tramite qualche libreria? (Io sono un novizio in questa parte del linux =)

  

Nota: la lettura del codice sorgente del ldd non era molto disponibile per le mie intenzioni:. Sembra che ldd è in realtà fork un altro processo e l'esecuzione del programma

Se non è possibile sapere che un programma ha dipendenze non soddisfatte senza eseguirlo, c'è qualche modo per, almeno, in modo rapido elencare il .so del necessario per che ELF tutto da dentro il mio programma?

Grazie in anticipo =)

È stato utile?

Soluzione

Come per ld.so (8) , impostando la variabile ambientale LD_TRACE_LOADED_OBJECTS ad una stringa non vuota fornirà risultati ldd-simile (anziché eseguire il binario o libreria normalmente).

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");

Altri suggerimenti

Hai provato la funzione dlopen? è possibile utilizzare questo per caricare una libreria dinamica (o, per il vostro caso, a ckeck se una libreria può essere caricato).

Avere una lista di librerie necessarie è più difficile, date un'occhiata a handle_dynamic funzione fonte readelf

Cosa succede ad usare ptrace () per tracciare tutti aperti () chiama per trovare tutti quello che il programma dipende da (tuttavia, l'output include i file, non solo biblioteche) .o forse filtrare l'uscita dal prefisso nel nome del file "/ lib" aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top