Perché `strip` non rimuove le intestazioni di sezione dagli eseguibili ELF?


9

Un eseguibile ELF minimo richiede solo l'intestazione ELF e almeno un'intestazione del programma per essere funzionale. Tuttavia, quando eseguo strip su un breve eseguibile, decide di non eliminare la tabella delle intestazioni di sezione o la sezione stringhe di sezione, mantenendoli in giro anche se non hanno scopo (per quanto ne so) dell'esecuzione del programma.

C'è un motivo per cui questi non vengono rimossi dalla striscia? Esiste un'altra utilità che rimuove tutto ciò che non è necessario per l'esecuzione dell'eseguibile? Ho provato a modificare manualmente l'eseguibile di code-golf che stavo facendo per rimuovere le intestazioni di sezione, e sembra funzionare bene ed essere molto più piccolo.


Probabilmente non viene rimosso perché potrebbe interrompere alcuni programmi / runtime
cat

Risposte:


3

La documentazione per GNU binutilsstrip allude alla ragione, ma non è esplicito, menzionare nella descrizione di --only-keep-debugche

Nota: le intestazioni di sezione delle sezioni rimosse vengono conservate, comprese le loro dimensioni, ma i contenuti della sezione vengono eliminati. Le intestazioni di sezione vengono conservate in modo che altri strumenti possano abbinare il file debuginfo con l'eseguibile reale, anche se tale eseguibile è stato trasferito in uno spazio di indirizzi diverso.

Cioè, a meno che non sia esplicitamente indicato tramite l' -Ropzione, stripmanterranno le intestazioni di sezione per aiutare altri programmi (incluso gdb) a fare il loro lavoro.

La pagina Uso corretto del comando strip (parte di Reverse Engineering che utilizza il sistema operativo Linux ) note

L'esecuzione del stripcomando su un eseguibile è il metodo di protezione del programma più comune. Nella sua operazione predefinita, il stripcomando rimuove la tabella dei simboli e qualsiasi informazione di debug da un eseguibile. Ecco come viene generalmente utilizzato. Tuttavia, ci sono ancora informazioni utili che non vengono rimosse.

e continua elencando alcune cose utili che potrebbero essere lasciate indietro - per l'analisi di un eseguibile "spogliato".

In Learning Linux Binary Analysis , questo è ripetuto, commentando che le intestazioni di sezione normalmente mancano solo quando qualcuno le ha deliberatamente rimosse, e che senza intestazioni di sezione, gdbe objdumpsono quasi inutili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.