Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #72, ДЕКАБРЬ 2004 г.

Операционные инструменты *nix-кодера

Иван Скляров

Хакер, номер #072, стр. 072-104-4


$ ./configure

$ make

Утилиты autoconf и automake входят в пакет Autotools.

Изучаем дампы

Утилита hexdump может вывести программу в десятичном виде (опция –d), шестнадцатеричном (опция –x), восьмеричном (опция –b) и в ASCII-символах (опция –c). Пример использования:

$ hexdump –c ./program

Утилита od аналогична hexdump:

$ od –c ./program

Собираем инфу из объектных файлов

По количеству функций objdump можно сравнить со швейцарским ножом. Например, она может легко дизассемблировать прогу (опция –D), показать все заголовки программы, в том числе файловые (опция –x), может показать содержимое всех секций (опция –s), динамически перемещаемые данные (опция –R) и многое другое. Пример:

$ objdump –D ./program

Определяем список зависимостей

Данная утилита показывает все динамические библиотеки, от которых зависит программа. Пример использования:

$ ldd ./program

В скобочках указывается адрес библиотеки в памяти.

Комментарий от редактора: ldd очень удобно использовать для двух целей: выяснение точных версий разделяемых библиотек, которые используются интересующей нас программой во время выполнения, и определение неразрешимых ссылок на разделяемые библиотеки.

Управляем ресурсами

Если твоя программа использует взаимодействие процессов, то тебе могут пригодиться утилиты ipcs и ipcrm. Команда ipcs, указанная с флагом -m, показывает сведения о совместно используемых сегментах:

$ ipcs -m

Если указать флаг -s, то ipcs покажет информацию о существующих группах семафоров. Утилита ipcrm позволяет удалить определенный сегмент в памяти или группу семафоров, например,

$ ipcrm shm 2345097

удаляет сегмент под id, равным 2345097.

Чтобы можно было работать с утилитами ipcs и ipcrm, в ядре BSD должны быть включены опции:

1. option SYSVMSG - поддержка сообщений в соответствии с System V;

2. option SYSVSEM - поддержка семафоров в соответствии с System V;

3. option SYSVSHM - возможность работы с разделяемой памятью в соответствии с System V.

Ковыряем бинарики

Утилита strings выводит последовательности ASCII-символов (слова) длиннее четырех (по умолчанию), которые хранятся в открытом виде в уже скомпиленной программе. Пример использования:

$ strings ./program

Для создания собственных программ полезность данной утилиты сомнительна, но для исследования чужих очень даже - к примеру, можно найти имена разработчиков, интересные комментарии, пароли и даже номера кредитных карт :).

Изучаем эльфов

С помощью readelf можно получить файловые заголовки и заголовки секций файлов ELF-формата. Об опциях ты узнаешь в хелпе или в man.

$ readelf ./program

Во власти статических либ

В пакете Binutils существует архиватор ar, который используется для создания статических библиотек. Например:

$ ar cr libmy.a file1.o file2.o

Флаги cr указывают на то, что должен быть создан архив. Существуют и другие флаги, например, для модификации или извлечения из архива (см. man). Для подключения полученной статической библиотеки к программам с помощью gcc или g++ нужно использовать флаг -L, который указывает, в каком каталоге следует искать библиотеку. Флаг -L. (с точкой) указывает на то, что библиотека находится в текущем каталоге. Затем все необходимые библиотеки перечисляются с помощью ключа -l, за которым указывается название библиотеки без префикса lib и окончания .a. В нашем случае:

Назад на стр. 072-104-3  Содержание  Вперед на стр. 072-104-5