Пробую как обычно - любой адрес из образа ядра и дальше поиск сигнатуры PE, но натыкаюсь на отсутсвтующие страницы при поиске вверх Смотрю _KPROCESS поке не вижу ничего подходящего( Как найти базу ядра?
Если начиная с любого KPROCESS, проходи через список ActiveProcessLinks. Если пойнтер в пространстве pool (адресные регионы описаны у Руссиновича в Windows Internals), то это очередной KPROCESS и его нужно игнорировать; идти дальше. При остановке (адрес не pool) будем на nt!PsActiveProcessHead. Отсюда уже понятно, сканируем наверх по 64 KB, ищем MZ/PE заголовки.
Есть быдло решение, но с дреганьем апи ZwQuerySystemInformation с SystemModuleInformation. Получаешь список - первый элемент ядро. В элементе imagebase поле.
Инфа про модуля хранится в загрузчике, сжет есчо где то, но это осе зависимая инфа. Трогать поля обьектов не годится, смещения плавают как и смысл полей. Это хардкодить. Сканить ядерный образ - будут проблемы, некоторые секции окончательно выгружены. Что бы какую то функцию из этого же модуля вызвать, то нужно знать для начала базу модуля, либо импорт настроен загрузчиком. SystemModuleInformation нормальное решение. Можно поставить на время ловушки и выполнить скан памяти(поиск пе), потом ловушки отменить. Но это низкоуровневая работа. При этом так же понадобятся функции ядра или особые извраты.
Fail, Более простого вообщем то и нет. Иначе берите конструктор и вперёд анализить системный код, что бы нужные смещения достать.