Например как получить программно адрес ntoskrnl.exe:KiBugCheckDriver? Вот что говорит о KiBugCheckDriver dumpbin на ntoskrnl.exe: .. 96C HIGHLOW 00483BA0 _KiBugCheckDriver D22 HIGHLOW 00483BA0 _KiBugCheckDriver C1 HIGHLOW 00483BA0 _KiBugCheckDriver FCE HIGHLOW 00483BA0 _KiBugCheckDriver DA HIGHLOW 00483BA0 _KiBugCheckDriver .. и т.д. Т.е. правильно ли я понимаю, что RVA переменной _KiBugCheckDriver есть 00483BA0? Вопросы: 1. Откуда dumpbin получает текстовое имя "_KiBugCheckDriver" если в ntoskrnl.exe явно оно не присутствует? 2. Каким образом, покопавшись в кишках загруженного образа РЕ (ntoskrnl.exe в частности) можно найти имя и адрес переменной (например KiBugCheckDriver) как это делает dumpbin? Можно привести какие-то аналогии по отношению к получению списка экспортов и импортов РЕ - с этим я немного знаком... Спасибо!
KeBugCheck2() дизасмить нужно. Можно релоки пропарсить, но не эффективно, поэтому взять дизассемблер длин и найти ссылку, там их многа на эту переменную. RVA KiBugCheckDriver будет 0x83BA0(нужно базу модуля 0x400000 отнять). Наверно из символов вытянул.
ну а чисто принципиально как это делается дизассемблером? ведь текстового имени _KiBugCheckDriver в самом екзешнике нет...
Ну как обычно делается. Проходим каждую инструкцию, находим необходимую последовательность опкодов и пр., затем извлекаем смещение.
я спрашивал о том откуда берется текстовое имя _KiBugCheckDriver для соответствующего адреса/смещения? вообще, есть ли готовый код для поиска неэкспортированых функций?