2010-11-14 17 views
25

Chciałbym rozebrać jak najwięcej - na Linux: ELF. Chcę tylko tam rzeczy, których potrzebuję, aby go uruchomić.Jak dokładnie usunąć pliki wykonywalne

Próbowałem za pomocą strip:

strip --strip-all elf 

Ale to nie wydaje się zrobić dobrą robotę: nm nadal wyświetla wiele rzeczy, a binarny jest nadal duża.

Co należy zrobić?

+1

Jak to zbudowałeś? –

+0

Zdaję sobie sprawę, że to pytanie zostało zadane od dawna. Zakładam, że zbudowałeś go jako binarnie dynamicznie połączony. Możesz uzyskać bardziej satysfakcjonujące wyniki, jeśli utworzysz statycznie połączony plik ELF, a następnie go usuniesz. –

Odpowiedz

28

Jeśli wszystko inne zawiedzie, można przeczytać dokumentację, zaczynając od man strip.

Poważnie, być może Twoja aplikacja zawiera wiele symboli i kodu. Na jednym krańcu, największe zmniejszenie rozmiaru byłoby rm elf, ale wtedy twój program nie będzie już działał. Wszystko zależy od twojego programu i tego, co w nim napisałeś.

Jako konkretny przykład, ostatnio pracowałem z dużą biblioteką C++, gdzie strip bez dalszych argumentów zmniejszyło rozmiar z 400 + mb do około 28 mb. Ale nie możesz już łączyć z nim (w kontekście innych bibliotek współdzielonych), czyniąc go nieco bezużytecznym.

Ale przy użyciu strip --strip-unneeded, zmienił on rozmiar z 400+ mb na 55 mb, który jest nadal znaczny, ale pozwolił na dostęp do biblioteki z innych udostępnionych bibliotek.

Krótko mówiąc, zaufałbym strip. Może twoja aplikacja nie może być dalej redukowana bez zmian kodu.

12

Użycie opcji -R do stripowania pozwala usunąć wszystkie sekcje, których nie potrzebujesz. Zobacz także this dotyczące minimalnych plików wykonywalnych ELF.

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

Ci dwaj mogą pomóc.

Powiązane problemy