Ниже приведены часто используемые мной команды отладчика:
Установка точки останова на создание именованного устройства | bp nt!IoCreateDevice "j (poi(@esp + (3 * @$ptrsize) )) '!ustr poi(@esp + (3 * @$ptrsize) )'; 'gc' " | |
Установка точки останова на уничтожение процесса 0xaabbccdd | bp nt!PspProcessDelete "j(poi(@esp + (1 * @$ptrsize) )!=0xaabbccdd) 'gc';'kb'" | |
Вывод в отладчик стека вызовов (трассировка отладочной печатью) при исполнении инструкции по адресу 0xaabbccdd | ba e 1 0xaabbccdd ".reload /user; kb 100; gc" | |
Точка останова для трассировки вызова создания/открытия файла с выводом структуры атрибутов объекта | bp nt!NtCreateFile "!obja poi(@esp + (3 * @$ptrsize) )";bp nt!NtOpenFile "!obja poi(@esp + (3 * @$ptrsize) )" | |
Точка останова для трассировки соединения с [A]LPC-портом | bp nt!NtSecureConnectPort "!ustr poi(@esp + (2 * @$ptrsize) )";bp nt!NtAlpcConnectPort "!ustr poi(@esp + (2 * @$ptrsize) )" | Функция nt!NtAlpcConnectPort(...) присутствует на системах Vista+ |
Точка останова для трассировки создания серверного [A]LPC-порта | bp nt!NtCreateWaitablePort "!obja poi(@esp + (2 * @$ptrsize) )";bp nt!NtCreatePort "!obja poi(@esp + (2 * @$ptrsize) )";bp nt!NtAlpcCreatePort "!obja poi(@esp + (2 * @$ptrsize) )" | Функция nt!NtAlpcCreatePort(...) присутствует на системах Vista+ |
Забыл точку останова в коде (int 3)? Выкашиваем одной командой :) | eb @eip 0x90 | Команда вписывает по текущему значению регистра EIP инструкцию "nop" |
Включение режима остановки отладчика при возникновении исключения в пользовательском режиме | !gflag +soe | Выключение: !gflag -soe |
Удаленная отладка через TCP |
На удаленной машине (которую хотим отлаживать) запускаем и подготавливаем отладчик, затем набираем:
.server tcp:port=PORT_NUM На основной машине (с которой хотим отлаживать) запускаем WinDbg, выбираем "File"->"Connect To Remote Session…" (Ctrl+R). В "Connection String" набираем: tcp:Port=PORT_NUM,Server=HOST_NAME |
PORT_NUM - номер TCP порта, по которому будет проходить отладка
HOST_NAME - имя отлаживаемого хоста или его IP-адрес |
Проблемы после команд трассировки исполнения отладочными регистрами, вида:
ba e 1 ADDR
Даже когда точка останова снята командой
bc*
у WinDbg появляются "фантомные боли". Он останавливается в другом процессе на этом адресе и не хочет продолжать исполнение кода. Лечится очисткой контрольного отладочного регистра dr7:
r dr7=0
Отличная подборка команд для WinDbg с кратким описанием: Updated Archive of the Debug Ninja’s Twitter Debug Tips. Некоторые приемы неочевидны и не описаны в документации, в общем - спасибо автору.
ΞρεΤΙκ