Погружение в технику и философию 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 программа после загрузки еще не готова к работе. Она не имеет регистрового контекста, и потому команды трассировки нам недоступны, однако, мы можем устанавливать точки останова внутри программы (не на библиотечные функции), просматривать/модифицировать память, дизассемблировать код и т.д. |