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

Погружение в технику и философию gdb

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

Хакер, номер #093, стр. 093-122-1


Взлом программ с помощью gdb

GDB – один из самых мощных отладчиков из всех когда-либо созданных, однако, переход с soft-ice на gdb обычно бывает очень болезненным. Запустив gdb, мы попадаем в совершенно иной мир, похожий на дремучий лес, в котором очень легко заблудиться, но мыщъх покажет, как обустроить gdb для хакерский целей, вырыть уютную нору и сделать свои первые шаги на пути к истинному Дао gdb.

[введение]

Под Linux/BSD существует множество отладчиков, но общепризнанный лидер - это, бесспорно, gdb, входящий в состав практически любого дистрибутива. Внешне (только внешне!) схожий с debug.com, он так и дышит мощью, поражающей воображение и потрясающей сознание по мере его освоения.

Да-да, именно освоения! В отличии от soft-ice, gdb основан на невизуальных концепциях и ориентирован на удобство работы, а совсем не на легкость освоения. В нем заложено столько возможностей, что их совершенно невозможно загнать в прокрустово ложе визуального интерфейса. По количеству органов управления gdb сравним разве что с истребителем и прежде, чем эта махина тронется с места, приходится прошерстить сотни страниц документации, отказаться от всех прежних привычек и понятий, вывернуть сознание наизнанку и поехать крышей. Зато потом soft-ice покажется жалкой поделкой, на которую невозможно смотреть без содрогания.

Эта статья — не пересказ документации по gdb, не руководство по командам и не структурированное описание основных возможностей gdb, адаптированное под хакерские цели. Мыщъх будет забегать вперед, пускаться в длинные отступления, ходить кругами и возвращаться обратно, но... по другому готовить о gdb просто не получается.

Все графические приблуды (типа Data Display Debugger) идут в топку, поскольку дискредитируют философию интерактивной отладки и превращают gdb в некоторое подобие морской свинки (и не свинки, и не морской), к тому же gdb имеет свою собственную встроенную "морду" (GDB Text User Interface), вызываемую ключом '-tui' командой строки и ориентированную преимущественно на отладку приложений с исходными текстами. Правда для хакеров она практически бесполезна.

[подготовка к отладке]

Загрузка исполняемых файлов в отладчик обычно осуществляется заданием их имени (при необходимости – с путем) в командной строке. При этом полезно указывать ключ '-quiet' (или, сокращенно, '-q') для подавления надоедливого копирайта.

# gdb -q gdb-demo

Для передачи программе аргументов используй ключ '--args', за которым следует имя отлаживаемого файла с его аргументами (обработка ключей gdb при этом прекращается, поэтому '--args' должен стоять последним в строке).

# gdb -q --args gdb-demo arg1 arg2...argN

При желании отлаживаемый файл можно загрузить непосредственно из отладчика командой "file":

# gdb -q

(gdb) file gdb-demo

Reading symbols from gdb-demo...done

Внимание! В отличие от soft-ice/turbo-debugger/ollydbg и прочих windows-отладчиков, в gdb программа после загрузки еще не готова к работе. Она не имеет регистрового контекста, и потому команды трассировки нам недоступны, однако, мы можем устанавливать точки останова внутри программы (не на библиотечные функции), просматривать/модифицировать память, дизассемблировать код и т.д.

Содержание  Вперед на стр. 093-122-2