EreTIk's Box » Заметки о WinDbg » Часто используемые команды отладчика


Ниже приведены часто используемые мной команды отладчика:


Установка точки останова на создание именованного устройства 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. Некоторые приемы неочевидны и не описаны в документации, в общем - спасибо автору.


ΞρεΤΙκ