incredibilmente improbabile dal momento che, in genere, non si ottiene l'intero contenuto della biblioteca iniettato nel vostro eseguibile.
Si ottiene solo sufficiente a soddisfare tutti i simboli non definiti. Questa potrebbe essere solo una piccola parte della libreria. Una libreria generalmente consiste in un insieme di file oggetto di cui solo quelli richiesti sono collegati al tuo eseguibile.
Ad esempio, se l'unica cosa che hai chiamato nella libreria di runtime C era exit()
, è molto improbabile che la famiglia di funzioni printf()
sia nell'eseguibile.
Se si è collegati direttamente ai file oggetto, si può avere una possibilità, dal momento che sarebbero inclusi se usati o meno (a meno che il linker non sia intelligente).
Ma anche quello sarebbe un compito titanico in quanto non ci possono essere informazioni nell'eseguibile su quali sezioni di codice provengono da specifici file oggetto. È potenzialmente fattibile ma, se c'è un altro modo, lo guarderei per primo.
Vorrei chiarire il processo tipico:
- Quattro file oggetto,
a.o
, b.o
, c.o
e d.o
contengono rispettivamente a()
, b()
, c()
e d()
le funzioni. Sono tutte aggiunti all'archivio abcd.a
.
- sono tutti standalone (senza dipendenze) tranne per il fatto che le chiamate
b()
c()
.
- Si dispone di un programma principale che chiama
a()
e b()
e lo si compila quindi collegarlo alla libreria abcd.a
.
- Il linker trascina
a.o
e b.o
dalla biblioteca e nel vostro eseguibile, soddisfacendo la necessità di a()
e b()
, ma l'introduzione di un bisogno di c()
, perché b()
ne ha bisogno.
- Il linker quindi trascina
c.o
fuori dalla libreria e nel file eseguibile, soddisfacendo la necessità di c()
. Ora tutti i simboli non definiti sono soddisfatti, l'eseguibile è fatto e spolverato, è possibile eseguirlo quando è pronto.
In nessuna fase del processo è stato d.o
trascinato nel file eseguibile in modo da avere zero speranze di ottenerlo.
Aggiornamento: Re il "se c'è un altro modo, sarei guardando quel primo" commento che ho fatto in precedenza, si è appena dichiarato in un commento ad una delle altre risposte che avete la fonte codice che ha creato le librerie che vuoi estrarre. Devo chiedere: perché non puoi ricostruire le librerie con quella fonte?Mi sembra una soluzione molto più semplice rispetto al tentativo di ricreare le librerie da una palude di codice eseguibile.
Lo scenario consiste in avere diversi file oggetto personalizzato, collegarli in un unico file libreria personalizzata, e il link statico che le biblioteche file all'interno dell'eseguibile. Se tutte le librerie sono personalizzate, non sono "completamente integrate" nell'eseguibile? In realtà non voglio ottenere il codice sorgente, voglio solo ottenere i file della libreria. – HyLian
Se ogni file oggetto nella libreria è necessario per soddisfare tutti i simboli non definiti allora sì, saranno tutti lì. Ma non è necessariamente il caso. – paxdiablo
Facciamo un passo indietro. Perché non hai i file .sl/.a? – paxdiablo