Есть инфа полученная из дебаг символов (кстати кто то может посоветовать нормальный вытягиватель структур, тот что есть сейчас фоллит слегка и необходимо править ручками ): Вот строчка из экстракченых символов ВИН ХП // pubsym <rva 0xa4703> <code> _PspTerminateThreadByPointer@8 Так вот - как вычислить это смещение в уже загруженном модуле ??? то есть найти адрес начала этой функции в памяти по смещению ? 804d7 В ехе файле в секциях показывает что это секция PAGE, То что я вижу в софтайсе - ntoskrnl.exe модуль загружен по адресу : 804d7000 при этом секция page находится по адресу 80563780, Правильный адрес функции в памяти: 8062d81a, Так вот - скажите как можно конечный адрес в памяти получить используя РВА - указанное выше? И еще один вопрос к зубрам: насколько данный метод хорош для нахождения неэкспортируемых функций ?
Спасибо за ответ, но почему то на реальной винде адрес слегка другой 0x804d7000 + 0xa4703 = 8057B703 а на самом деле 8062d81a - может кто то его переместил .... ? RVA отсчитывается от начала модуля или секции ?
итак, ntoskrnl.exe - 5.1.2600.2180 pdbdump: pubsym <rva 0xa74c5> <code> _PspTerminateThreadByPointer@8 рабочая винда: Kernel base = 0x804d7000 db PspTerminateThreadByPointer 8057e4c5 8b ff 55 8b ec 83 ec 0c-83 4d f8 ff 56 57 8b 7d va = 8057e4c5, rva = 8057e4c5 - 804d7000 = 0xa74c5 !!! rva = a74c5 == pubsym_rva Проверь, совпадают ли версии ядер!
Да, будет.. Вообще, это легко проверить.. в свойсвах системы: если есть "Расширение физических", то PAE-ядро используется. В Windows XP SP2 (MP и UP) с определенным кол-вом ram PAE включается по умолчанию
Спасибо Огромное - действительно - ошиблись с этим дуо коре Там используется другой модуль - как в ядре получиль какая загружена версия - однопроцессорная или много процессорная ? И заодно версии виндоус различать ?
самый простой метод для определения какое ядро загружено: однопроцессорное или нет - это посмотреть количество процессоров с помощью KeQueryActiveProcessors, но он, понятное дело, не всегда работает.. можно просто определить Internal Name файла загруженного ядра из PE-заголовка от туда же можно узнать и версию!
nt!KeNumberProcessors - это если нужно именно количество логических процов, а не тип ядра nt!NtBuildNumber - версия ядра