2015-07-16 23 views
9

Ho un file x86 a 32 bit ELF che contiene una sezione .eh_frame, nonostante i miei tentativi per rimuoverlo.Come rimuovere una sezione ELF specifica, senza rimuovere altri simboli?

Vorrei rimuovere la sezione .eh_frame, senza toccare alcun simbolo in altre sezioni, incluse quelle inutilizzate.

strip non sembra avere un'opzione --remove-only e finisce sempre per modificare altre sezioni.

Come posso rimuovere una singola sezione ELF senza modificare qualcos'altro nel file?

Come suggerito in other questions, ho provato diverse varianti di gcc-3.4.3 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables, ma la sezione .eh_frame è sempre presente. Ciò è probabilmente dovuto al fatto che devo usare un vecchio GCC (3.4.3) ... il file sorgente stesso non contiene nulla di speciale che potrebbe richiedere queste sezioni: int main() { return 0; }.

risposta

16

strip, nonostante il nome, non è lo strumento giusto qui.

Una possibile soluzione è objcopy --remove-section .eh_frame a.out, dove a.out è il nome del file ELF da modificare.

Sfortunatamente, a meno che non si sia a conoscenza di objcopy, si può finire alla ricerca di soluzioni con strip, senza trovarne.