Операционные инструменты *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. В нашем случае: |