| ||
Еще раз про оптимизациюX-Stranger Лазая по необъятным просторам Интернета, как-то раз я напоролся на довольно интересную информацию. Я уже говорил, как сделать запускаемые файлы в Linux меньше, при помощи утилиты strip. Но оказывается, что это еще не все лишнее, что можно удалить! Меня всегда интересовал вопрос уменьшения кода программ, для чего я не раз использовал всем известную утилиту upx, которая является кросс-платформенным упаковщиком исполняемых файлов, но ведь здесь совсем другое дело! В результате поисков выяснились очень интересные вещи. Как известно, исполняемый файл состоит из так называемых секций. ELF формат (самый распространенный формат исполняемых файлов под *nix) имеет два типа секций: одни обычные, используемые линковщиком и подобными программами, а другие — так называемые программные, т.е. которые используются ядром при загрузке файла на исполнение. Более того, если, скажем, для объектных файлов и разделяемых библиотек необходимы первые (символьные) — по достаточно очевидным причинам, ведь эти файлы предназначены для их дальнейшей обработки (линковка или динамическая загрузка), то для обычных исполняемых файлов необходимы ТОЛЬКО программные секции. Ни код запуска ELFов, ни ELF interpretor в своей работе не используют символьных секций! Тем не менее, линковщик честно помещает их в каждый генерируемый файл. Далее выяснились еще более забавные вещи. При создании ELF-файлов, скажем, линуксовым компилятором ассемблера Nasm (и другими программами) он вставляет в каждый объектный файл секцию с комментариями, что данный файл был произведен Nasm'ом версии такой-то. Но ведь я и так знаю это! Зачем мне нужна в каждом объектном файле такая секция? Кроме того, содержимое всех этих секций аккумулируется при линковке в секции комментариев исполнимого файла! Но, оказывается, упомянутая секция с комментариями, а также секции с символьной таблицей (та, что удаляется, когда вы используете утилиту strip) вообще не грузятся кернелом для исполнения. Т.е. программа может легко обойтись без них. Как же избавиться от этой кучи ненужностей? Можно, конечно, написать собственными ручками такую программу, использовав описание ELF-формата (это можно почитать здесь: http://www.muppetlabs.com/). Но для вырезания кучи ненужной информации уже написано несколько программ. Я хочу посоветовать набор подобных утилит Kickers of ELF. Взять пакет исходных текстов этих программ можно здесь: http://www.muppetlabs.com/ ~breadbox/pub/software/ELFkickers-2.0a.tar.gz
Что включает в себя данный пакет программ? Существует также набор утилит, написанный Red Plait (redplait@usa.net) , вот только где их достать, пока не знаю. Но, как известно, на просторах Интернета можно найти все, что угодно. Источник: http://www.nestor.minsk.by/kg
| ||
Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com |