Как считать и главное на ЧТО проверить? С чем сравнивать? Код (Text): sidt FWord ptr idtr mov eax,DWord Ptr idtr+2 add eax,$170 mov ebx,[eax] //аксес виялятиун, если вместо этого сделать ReadProcessMemory, то будут нули нищщщего не понял ))))
Deader IDT находится в памяти ядра и недоступна пользовательскому коду. Можно читать PhysicalMemory (IDT не выгружается), но не все ОС позволяют это делать (в Vista+ запрещено). Самое простое -- написать драйвер. С другой стороны, в Vista+ ядро само проверяет целостность IDT (Patch guard), но некоторые проактивные защиты, например, его обходят. Самое простое, по-моему -- написать драйвер.
Определить те функции который явно не будут перехватыватся. Положить в стек не валидные данные и в цикле делать вызов с замером времени выполнения(Очень большой цикл ). Определить функцию(не сколько фукнций) которая может быть перехваченной . И опять таки положить в стек инвалидные данные и в циксле выполнить с замером времени выполнения. Сравнить время выполнения. ну и получится какой то не очень веселый и кривой эвристик. . Инвалидные данные нужны что бы убрать полезную нагрузку вызываемых функций.
Я это знаю, но Unix сказал "Считать IDT" поэтому я и привел код, дающий ошибку в р3 и спросил "как считать?", т.к. я не знаю как это сделать в р3. не пойдет - надо только в р3 shchetinin спасибо, попробую посмотреть - что выйдет...