Как тщательно удалить исполняемые файлы - PullRequest
34 голосов
/ 14 ноября 2010

Я бы хотел раздеть как можно больше - в Linux: ELF. Мне нужны только те вещи, которые мне нужны для запуска.

Я пытался использовать strip:

strip --strip-all elf

Но, похоже, это не очень хорошо работает: nm по-прежнему отображает много вещей, а двоичный файл все еще большой.

Что мне делать?

Ответы [ 4 ]

35 голосов
/ 14 ноября 2010

Если ничего не помогает, вы можете прочитать документацию, начиная с man strip.

Серьезно, возможно, в вашем приложении много символов и кода.С одной стороны, самое большое уменьшение размера будет rm elf, но тогда ваша программа больше не будет работать.Все зависит от вашей программы и того, что вы в ней закодировали.

В качестве конкретного примера я недавно работал с большой библиотекой C ++, где strip без дополнительных аргументов уменьшил размер с 400 + мб до примерно 28 мб.Но тогда вы не можете больше ссылаться на него (в контексте других общих библиотек), делая его несколько бесполезным.

Но при использовании strip --strip-unneeded он изменил размер с 400+ мб до 55 мб, что все еще значительно, но позволил доступ к библиотеке из других общих библиотек.

Короче говоря,Я бы доверял strip.Возможно, ваше приложение не может быть сокращено без изменения кода.

15 голосов
/ 14 ноября 2010

Используя опцию -R для удаления, вы можете удалить все ненужные разделы. Также посмотрите на это относительно минимальных исполняемых файлов ELF.

7 голосов
/ 14 июня 2011

Я бы ознакомился с этой замечательной статьей, в которой подробно рассказывается о том, как сделать исполняемый файл ELF настолько маленьким, насколько это возможно.Может быть, есть информация, которая может помочь!

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

1 голос
/ 14 ноября 2010
strip -R .comment
gcc -Os elf.c

Эти двое могут помочь.

...