найти базовый адрес текущей процедуры в пространстве ядра

#windows #kernel #driver #dump #portable-executable

#Windows #ядро #драйвер #дамп #переносимый-исполняемый

Вопрос:

привет, я дамп другого процесса в драйвере ядра

и используйте KeStackAttachProcess для изменения текущего контекста драйвера

после изменения адреса пользовательского режима, как можно найти базовый адрес текущего процесса, мне нужен базовый адрес для приведения его к PIMAGE_DOS_HEADER (и проанализировать его для поиска разделов), можно использовать PEB?

есть другое решение?

Ответ №1:

Для этого есть специальная функция API:

 NTKERNELAPI
PVOID
PsGetProcessSectionBaseAddress(
    __in PEPROCESS Process
    );
  

И вы можете использовать поле SectionBaseAddress в структуре EPROCESS:

  0x128 SectionBaseAddress : 0x00400000 Void
  

Он может отличаться в разных версиях ОС.

Комментарии:

1. я не могу найти PsGetProcessSectionBaseAddress в WDK, он отменен? и использовать его нормально?

2. Да, это undoc. Просто проверьте, существует ли эта функция в версиях ОС, которые вы хотите поддерживать. Он существует на моих компьютерах w2k3 и w7, но я не уверен в более ранних системах.