Строим отладчик Ms-Rem (Ms-Rem@yandex.ru) Хакер, номер #083, стр. 083-112-5 4) Дизассемблер должен работать с кодом покомандно, то есть работать с отдельно взятой командой, не опираясь при этом на окружающий контекст. Устанавливать связь между командами - это задача кодоанализатора, который может при необходимости присутствовать в отладчике. 5) Желателен (но не обязателен) малый размер дизассемблера и возможность его использования в программах, написанных на различных языках программирования (С++, Delphi etc). 6) Открытый исходный код (так как тебе может понадобиться что-либо изменить в дизассемблере). Если для решения твоей задачи нужен полноценный дизассемблер, удовлетворяющий всем вышеприведенным требованиям, то ты можешь использовать мой CADt (Code Analization and Disassemblibg Tool), выполненный в виде библиотеки, которую можно использовать в любых своих программах. Он поддерживает полный набор команд процессора Pentium 3 (386, MMX, SSE) и предназначен специально для использования в отладчиках и кодоанализаторах. Он полностью независим от системы и может использоваться как и в программах, работающих в третьем кольце, так и в отладчиках уровня ядра. В дистрибутив дизассемблера входит две версии DLL (одна предназначена для ring3, другая - для драйверов), объектные файлы для статической линковки, заголовочные файлы для Borland Delphi и MS Visual C++, исходный код дизассемблера на паскале (компилируется во всех версиях Delphi, начиная c третьей) и примеры применения дизассемблера в программах. Размер скомпилированной библиотеки - 18 кб, а то ты, наверно, уже испугался, думая, что дизассемблер на Delphi будет весить не меньше мегабайта. Если же тебе будет достаточно дизассемблера длин, то можешь использовать мою библиотеку LDasm. Она поддерживает все существующие наборы инструкций для 32-битных x86 совместимых процессоров (386, MMX, SSE, SSE2, SSE3, 3DNow) и распространяется в исходных текстах. Несомненно, тебя порадует то, что исходники этого дизассемблера доступны в версиях на C++, Delphi, Visual Basic и на ассемблере, - выбирай, что тебе по вкусу. Оба дизассемблера ты можешь найти на диске с журналом, либо скачать с моего сайта ms-rem.dot-link.net. Если ты найдешь в них какую-нибудь ошибку, то обязательно сообщи мне на мыло, и я ее тотчас же ликвидирую. [Debug API] Я думаю, ты уже понял, что Debug API - это набор системных функций, реализующих те или иные отладочные механизмы. Эти функции удобны в применении, но, к сожалению, не позволяют отлаживать код, исполняемый в нулевом кольце, и имеют много других неприятных ограничений. Но на Debug API построено достаточно много отладчиков, в том числе и такой весьма популярный дебаггер, как OllyDbg. Итак, настала пора перейти от теории к практике, попробуем написать Ring3-трейсер, который бы запускал программу в режиме отладки, устанавливал точку останова на ее точке входа, а после ее срабатывания трассировал бы программу на определенное количество команд, попутно дизассемблируя выполняемый код и сохраняя лог в файл. |