2010-11-14 13 views
25

Vorrei strisciare il più possibile: su Linux: un ELF. Voglio solo lì le cose di cui ho bisogno per eseguirlo.Come eliminare completamente gli eseguibili

Ho provato ad utilizzare strip:

strip --strip-all elf 

Ma non sembra fare un buon lavoro: nm mostra ancora un sacco di roba, e il binario è ancora grande.

Cosa devo fare?

+1

Come l'hai costruito per cominciare? –

+0

Mi rendo conto che questa domanda è stata posta molto tempo fa. Suppongo che tu l'abbia costruito per essere un binario collegato dinamicamente. È possibile ottenere risultati più soddisfacenti se si crea un file ELF collegato staticamente e quindi lo si spoglia. –

risposta

28

Se tutto il resto fallisce, è possibile leggere la documentazione, a partire da man strip.

Seriamente, forse la tua applicazione ha molti simboli e codice. Ad un estremo, la riduzione di dimensione maggiore sarebbe rm elf ma il programma non verrà più eseguito. Tutto dipende da il tuo programma e da cosa hai codificato.

Come esempio concreto, ho recentemente lavorato con una grande libreria C++ in cui strip senza ulteriori argomenti ha ridotto le dimensioni da 400 + mb a circa 28 mb. Ma allora non potevi più collegarti (nel contesto di altre librerie condivise), rendendolo alquanto inutile.

Ma quando si utilizza strip --strip-unneeded, ha cambiato le dimensioni da 400+ mb a 55 mb, che è ancora considerevole, ma ha consentito l'accesso alla libreria da altre librerie condivise.

In breve, mi fido dello strip. Forse la tua applicazione non può essere ulteriormente ridotta senza modifiche al codice.

12

Utilizzando l'opzione -R per strisciare, è possibile rimuovere tutte le sezioni non necessarie. Guardare anche a this per quanto riguarda gli eseguibili ELF minimi.

0
strip -R .comment 
gcc -Os elf.c 

Questi due potrebbero aiutare.