суббота, 31 июля 2010 г.

Ищем в кернеле KdDebuggerDataBlock

Если вы не знаете что такое KdDebuggerDataBlock и зачем оно нужно - дальше лучше не читать. Если знаете - то наверняка и сами умеете находить эту структуру и дальше тоже можно не читать

Начиная с w2k в винде появилась интересная структура для поддержки отладчика KdDebuggerDataBlock. Тип ее можно посмотреть в например WinDBG SDK в файле wdbgexts.h - структура KDDEBUGGER_DATA64 - это вот оно и есть. Там не все поля описаны - лучше всего смотреть в сорцы ReactOS где-нть в include/psdk/wdbgexts.h

И было бы весьма недурно использовать эту структуру для всякого разного, но есть одна маленькая проблема - символ KdDebuggerDataBlock не экспортируется под всеми доступными мне версиями windows.

А тем не менее есть дико простой способ найти ее адрес - достаточно посмотреть на ее определение и увидеть, что как минимум 4 поля из нее являются указателями на экспортируемые символы: KiBugCheckData, MmHighestUserAddress, MmSystemRangeStart и MmUserProbeAddress. Итак - мы знаем что она расположена в секции .data и содержит 4 адреса экспортируемых переменных. Т.е. можно просто поискать каким-нть алгоритмом Boyer-Moor адрес одной любой из них и проверить на нужных полях наличие остальных

Код приводить не буду в силу крайней примитивности реализации

1 комментарий:

  1. Есть ещё способ полчить адрес KdDebuggerDataBlock используя KeCapturePersistentThreadState (пример здесь http://www.wasm.ru/article.php?article=kcpts).

    ОтветитьУдалить