Господа, существует ли в природе способ осуществить перехват обработчика ошибок страниц в Windows x64?
Medstrax PatchGuard!!! o14189 вопрос связан с поиском легального (относительно) способа решения задачи под x64!
Ну IDT отпадает, остаются внутренние/недокументированные структуры ядра, правда, боюсь, что в современных версиях PG это всё тоже контролируется. Ну если тебе нужен этот гемор, вперёд, реверси, исходники ковыряй... Clerk'у привет.
Ну КК помнится писал что IDT/GDT проверяются по crc, тогда мы можем изменить crc на оригинальный добавив один эелемент в IDT.
retmas нужно смотреть в сторону IoConnectInterrupt и то с каким механизмом она связана, об этом уже писали и много раз (искать как обычно в гугле)
И что ты предлагаешь? Патчить KINTERRUPT? Они, скорее всего, контролируются. А переподключать свой обработчик прерывания к уже занятому, - в любом случае недокументировано, и я вообще не уверен, что это возможно средствами ядра.
А ещё есть MmSetPageFaultNotifyRoutine(), которая этот указатель устанавливает, но не экспортируется, к сожалению. Впрочем, её адрес можно найти. Почему я упоминаю это функцию, потому что если уж ставить те или иные колбеки, то лучше делать это специально предназначенными для этого средствами ядра, например, ибо они автоматически и корректно пересчитывают хеши PatchGuard'а, а в случае подмены адреса руками вам придётся сделать это самостоятельно. А вообще, сам я этот хак не использовал, но попробуйте кто-нибудь найти её и поставить свою, потом отпишитесь. Вообще, не думаю, что эти все способы могут иметь какую-либо коммерческую ценность, но тем не менее всё имеет право на существование... Добавлю только, что на Windows Server 2003 SP2 x64 функция MmSetPageFaultNotifyRoutine() никакие хэши не пересчитывает и с PG вообще не контактирует, соответственно, получается, что никто этот указатель не палит. Но для Vista x64 и выше советую всё же убедиться в этом самостоятельно.
Кстати, MmSetPageFaultNotifyRoutine точно не решение!!! Ее просто нет больше не в 6.0 (vista_sp2, srv_08_sp2) не в 6.1 (7, srv_08_r2)
В любом случае, стоит посмотреть в сторону других exception-related колбеков, пусть и недокументированных/неэкспортируемых.