По сабжу, с помощью IdtDump.exe от Four-F: Код (Text): 0030 0008:806B14C0 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0031 0008:816AC67C 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0032 0008:8052CBA4 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0033 0008:8052CBAE 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0034 0008:8130C85C 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0035 0008:813A4D4C 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0036 0008:8052CBCC 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0037 0008:8052CBD6 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0038 0008:806ABE80 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 0039 0008:81BE5044 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 003A 0008:81317B5C 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 003B 0008:81606BC4 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 003C 0008:8130EDD4 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 003D 0008:8052CC12 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 003E 0008:81BDF9CC 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts 003F 0008:81B99DD4 0 P 32 bits Interrupt Gate User Defined (Non-reserved) Interrupts А вот livekd и применение !idt получаю: Код (Text): kd> !idt Dumping IDT: 30: 806b14c0 hal!HalpClockInterrupt 31: 816ac67c i8042prt!I8042KeyboardInterruptService (KINTERRUPT 816ac640) 34: 8130c85c serial!SerialCIsrSw (KINTERRUPT 8130c820) 35: 813a4d4c portcls!CInterruptSync::Release+0x10 (KINTERRUPT 813a4d10) portcls!CInterruptSync::Release+0x10 (KINTERRUPT 813203c0) 38: 806abe80 hal!HalpProfileInterrupt 39: 81be5044 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 81be5008) 3a: 81317b5c USBPORT!USBPORT_InterruptService (KINTERRUPT 81317b20) USBPORT!USBPORT_InterruptService (KINTERRUPT 8130dd98) USBPORT!USBPORT_InterruptService (KINTERRUPT 81307b20) 3b: 81606bc4 VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 81606b88) NDIS!ndisMIsr (KINTERRUPT 815b4918) 3c: 8130edd4 i8042prt!I8042MouseInterruptService (KINTERRUPT 8130ed98) 3e: 81bdf9cc atapi!IdePortInterrupt (KINTERRUPT 81bdf990) 3f: 81b99dd4 atapi!IdePortInterrupt (KINTERRUPT 81b99d98) 1я утилита как я понял говориту нету ничего, а вот 2я говорит есть! Кто прав или чего я еще не понимаю?
Ms Rem Сорри я только еще читаю про этот темный лес и еще не обладаю взглядом какой у тебя и Four-F не мог бы ты написать что ты видешь? Я беру строку 30: 806b14c0 hal!HalpClockInterrupt и гляжу в 0030 0008:806B14C0, ну нету там hal!HalpClockInterrupt или это как надо смотреть? Плюс к тому же, как я понял у меня PICi8259A а это 15 номеров, ну откуда здесь 256 штук в IDT?
ЛОЛ Чувак!!! Неужели не видно что и там и там стоит адрес 806b14c0? А имя функции с этим адресом IdtDump показывать не умеет. Оттуда, что в IDT может быть дохрена прерываний никак не связаных с железом. З.Ы. купи себе очки.
EvilsInterrupt Это еще со времен DOS заведено - таблица прерываний содержит 256 обработчиков, на часть из которых могут быть спроецированны аппаратные прерывания (в некоторых случаях и поболее 15).
<font color="gray][ EvilsInterrupt</font><!--color--><font color="gray]: ...ну нету там hal!HalpClockInterrupt или это как надо смотреть? ]</font><!--color--> kd и WinDBG используют так называемые файлы символьных идентификаторов или по-иноземному Symbol Files ( *.pdb файл ). Грубо говоря - это карта, в которой каждому символу ( имени функции, переменной и т.п. ) соответствует его адрес в памяти. Когда дебаггер выводит что-нибудь, он пытается найти соответствие между адресами и символами. Если в карте для hal прописано, что адрес 806b14c0 соответствует функции HalpClockInterrupt, то дебаггер это и покажет. Проблема в том, что на самом деле это может быть и не так. Т.е. символы просто не соответствуют модулю (чуть разные билды, например), но при этом дебаггер не может это распознать. Может быть ещё хуже. У меня на одной машине с w2k всё время был такой косяк: установив систему, я сливал несколько pdb с помощью Symbol Retriever из Driver Studio и всё работало нормально. Через некоторое время я переустанавливал систему с того же дистрибутива и эти символы переставали подходить! В чём там косяк был я так и не разобрался - проще было заново влить. Эта проблема (несоответствие симвлов) подробно описана в разделе "Invalid or Missing Symbols" справки для WinDBG. Несоответствие символов можно обнаружить на глаз: нужно дизасмнуть несколько известных функций и сразу будет видно (не)соответствие. Код (Text): kd> u ZwCreateFile ntdll!NtCreateFile: 77f89694 b820000000 mov eax,0x20 77f89699 8d542404 lea edx,[esp+0x4] 77f8969d cd2e int 2e 77f8969f c22c00 ret 0x2c kd> u KiSystemService nt!KiSystemService: 805428dd 6a00 push 0x0 805428df 55 push ebp 805428e0 53 push ebx 805428e1 56 push esi 805428e2 57 push edi 805428e3 0fa0 push fs 805428e5 bb30000000 mov ebx,0x30 805428ea 668ee3 mov fs,bx При этом, если все с виду совпадёт, на 100% всё равно нельзя сказать про полное соответствие. Поэтому лучше всего прочесть большой и умный раздел "Symbols" в справке для WinDBG - там все подробно расписано. Касательно IDT, доподлинно известно, что большая её часть не используется и !idt покажет нечно вроде этого (если нет, то символы кривые): Код (Text): 40: 80541fc0 (nt!KiUnexpectedInterrupt16) 41: 80541fca (nt!KiUnexpectedInterrupt17) 42: 80541fd4 (nt!KiUnexpectedInterrupt18) 43: 80541fde (nt!KiUnexpectedInterrupt19) ... fc: 805426eb (nt!KiUnexpectedInterrupt204) fd: 805426f2 (nt!KiUnexpectedInterrupt205) fe: 805426f9 (nt!KiUnexpectedInterrupt206) ff: 80542700 (nt!KiUnexpectedInterrupt207) ЗЫ: IdtDump даже не пытается по символам интерпритировать адреса.