Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #89, МАЙ 2006 г.

Ловушки для капризных программ

Крис Касперски

Хакер, номер #089, стр. 089-106-6


[невесомые бинарики]

По умолчанию большинство программ собирается с отладочной информацией, что существенно упрощает отладку, но вместе с тем увеличивает размер. Поскольку дебаггинг чужих программ не входит в наши планы, отладочную информацию лучше убрать. Это можно сделать либо на стадии конфигурации, например "./configure --disable-debug", либо "вырезать" ее из elf-файла "вживую", пропустив его через штатную утилиту strip. Но прежде чем это делать, запустим программу file и посмотрим, что собой представляет подопытная программа. Вот, например, Bochs:

$ file bochs

bochs: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0,

dynamically linked (uses shared libs), not stripped

Ага, "not stripped". Вот почему bochs занимает целых 9 Мб! Берем в руки скальпель, и с помощью утилиты strip удаляем отладочную информацию из файла:

$ strip bochs

Файл сразу же худеет до 1 Мб, сокращая свой объем в девять раз, причем без какой бы то ни было потери функциональности!

[инсталляция во сне и наяву]

Откомпилированная программа, как правило, еще не готова к работе. Нам предстоит еще много дел: удалить промежуточные файлы, созданные в процессе компиляции (библиотеки, объектные файлы), настроить конфиги, рассортировать файлы данных по своим директориями, а при необходимости — изменить системные настройки.

За это отвечает команда "make install", однако далеко не во всех программах она реализована. Взять, например, хотя бы тот же biew.

С другой стороны, автоматическая инсталляция — это рулетка. Все мы знаем, во что способен превратить систему кривой setup.exe. Поэтому прежде чем набирать "make install", неплохо бы заглянуть в секцию "install:" нашего makefile и посмотреть, что она собирается делать. Вдруг нас это не устраивает?

Можно попробовать дать команду "make uninstall", удаляющую программу из системы. Однако в подавляющем большинстве случаев она не реализована.

Существует такая полезная шутка, как CheckInstall (checkinstall.izto.org). Это бесплатно распространяемая утилита, трассирующая "make install" на виртуальной машине и автоматически генерирующая полноценный "дистрибутив" любого типа: Slackware, RPM или Debian-совместимый пакет, устанавливаемый в систему соответствующим менеджером инсталляций, который всегда может сделать корректный uninstall, даже если он не был предусмотрен автором программы. Просто вместо "make install" мы должны написать "checkinstall" и немного подождать.

Кстати говоря, большинство инсталляторов помещают программы в каталог /usr/local/bin, что не всем нравится. Правильные конфигураторы поддерживают ключ "--prefix", позволяющий устанавливать программы куда угодно, например "./configure --prefix=/opt", а неправильные заставляют нас это делать своими руками.

[заключение]

Вот, оказывается, какой нетривиальный процесс! Чудес не бывает! Тупая перекомпиляция только вредит и работает хуже готовой "официальной" сборки. Ручная компиляция — это дверь в мир практически неограниченных возможностей, однако попасть в него может только тот, кто не боится сложностей, готов совершать ошибки и умеет работать с документацией.

Назад на стр. 089-106-5  Содержание