Начал разибратся с ядром Windows. Есть много вопросов, по ходу дела буду их тут задавать. Первый: Номер каждого прерывание обрабатывает подпрограмма в ядре, ее адрес находится в IDT? Можно ли как-то написать драйвер, который при загрузке подменит адрес обработчика прерывания допустим, INT 78? Часто вижу пишут "Драйвер режима ядра", бывают еще и драйвера ring3? Еще вопрос, dll библиотека ntdll.dll есть в адресном простанстве каждого процесса, при регистрации и запуске драйвера в адресном простанстве каждого процесса выше 0x7FFFFFFF тоже по какому то адресу будет загружен мой драйвер и все остальные? Где можно почитать про взаимодействие ring3 приложения с своим драйвером? Чем отлаживать драйвера? Syser, SoftICE?
ring3 драйвера, можно пример? Нужно править IDT? Как узнать начало таблицы диспетчиразации системных вызовов?
нафиг, нафиг. WinDbg. ну а как еще перехватить прерывание? ну можно еще править IDTR. да да ну да, тоже по какому-то адрес будет загружен твой драйвер и остальные. вопрос был да/нет? я просто не врубил. в мсдн, IOCTL_DEVICE_CONTROL
Мне интересно было бы посмотреть память выше 0x7FFFFFFF только для чтения, так легче можно будет понять некоторые вещи, есть какие то утилиты для этого?
SubXor o Послать IPI(KeIpiGenericCall etc.) и локально загрузить дескриптор соответствующий в IDT. o KiAbiosGdt[] -> GDT -> KPCR -> IDT. o HalpProcessorPCR[] -> KPCR -> IDT. - Вначале общую архитектуру изучите, потом только драйвера писать.
Этим и занимаюсь, можете порекомендовать способы продуктивнее это делать? Почему при !idt в livekd выводит адреса только для 10 прирываний? Код (Text): Dumping IDT: 30: 806f4d50 hal!HalpClockInterrupt 31: 8193615c i8042prt!I8042KeyboardInterruptService (KINTERRUPT 81936120) 35: 81935044 portcls!CKsShellRequestor::`vector deleting destructor'+0x26 (K INTERRUPT 81935008) 38: 806eeef0 hal!HalpProfileInterrupt 39: 81bdfb44 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 81bdfb08) *** ERROR: Symbol file could not be found. Defaulted to export symbols for VBoxGuest.sys - VBoxGuest+0xB00 (KINTERRUPT 81b932e0) 3a: 81965044 USBPORT!USBPORT_InterruptService (KINTERRUPT 81965008) NDIS!ndisMIsr (KINTERRUPT 81912008) 3b: 818eb044 USBPORT!USBPORT_InterruptService (KINTERRUPT 818eb008) VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 81948120) 3c: 8194e044 i8042prt!I8042MouseInterruptService (KINTERRUPT 8194e008) 3e: 81bcf7e4 atapi!IdePortInterrupt (KINTERRUPT 81bcf7a8) 3f: 81bd7cc4 atapi!IdePortInterrupt (KINTERRUPT 81bd7c88) Мне например интересно увидеть код обработчика, третьего прирывания.