Непонятки с IDT, IdtDump.exe говорит одно, а livikd -> !idt другое ..

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 9 апр 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    По сабжу, с помощью IdtDump.exe от Four-F:
    Код (Text):
    1. 0030  0008:806B14C0   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    2. 0031  0008:816AC67C   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    3. 0032  0008:8052CBA4   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    4. 0033  0008:8052CBAE   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    5. 0034  0008:8130C85C   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    6. 0035  0008:813A4D4C   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    7. 0036  0008:8052CBCC   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    8. 0037  0008:8052CBD6   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    9. 0038  0008:806ABE80   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    10. 0039  0008:81BE5044   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    11. 003A  0008:81317B5C   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    12. 003B  0008:81606BC4   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    13. 003C  0008:8130EDD4   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    14. 003D  0008:8052CC12   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    15. 003E  0008:81BDF9CC   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts
    16. 003F  0008:81B99DD4   0   P   32 bits  Interrupt Gate               User Defined (Non-reserved) Interrupts


    А вот livekd и применение !idt получаю:
    Код (Text):
    1. kd> !idt
    2.  
    3. Dumping IDT:
    4.  
    5. 30:     806b14c0 hal!HalpClockInterrupt
    6. 31:     816ac67c i8042prt!I8042KeyboardInterruptService (KINTERRUPT 816ac640)
    7. 34:     8130c85c serial!SerialCIsrSw (KINTERRUPT 8130c820)
    8. 35:     813a4d4c portcls!CInterruptSync::Release+0x10 (KINTERRUPT 813a4d10)
    9.                  portcls!CInterruptSync::Release+0x10 (KINTERRUPT 813203c0)
    10. 38:     806abe80 hal!HalpProfileInterrupt
    11. 39:     81be5044 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 81be5008)
    12. 3a:     81317b5c USBPORT!USBPORT_InterruptService (KINTERRUPT 81317b20)
    13.                  USBPORT!USBPORT_InterruptService (KINTERRUPT 8130dd98)
    14.                  USBPORT!USBPORT_InterruptService (KINTERRUPT 81307b20)
    15. 3b:     81606bc4 VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 81606b88)
    16.                  NDIS!ndisMIsr (KINTERRUPT 815b4918)
    17. 3c:     8130edd4 i8042prt!I8042MouseInterruptService (KINTERRUPT 8130ed98)
    18. 3e:     81bdf9cc atapi!IdePortInterrupt (KINTERRUPT 81bdf990)
    19. 3f:     81b99dd4 atapi!IdePortInterrupt (KINTERRUPT 81b99d98)


    1я утилита как я понял говориту нету ничего, а вот 2я говорит есть! Кто прав или чего я еще не понимаю?
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Хм, насколько я вижу, они показывают одно и тоже.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ms Rem

    Сорри я только еще читаю про этот темный лес и еще не обладаю взглядом какой у тебя и Four-F не мог бы ты написать что ты видешь?



    Я беру строку 30: 806b14c0 hal!HalpClockInterrupt

    и гляжу в 0030 0008:806B14C0, ну нету там hal!HalpClockInterrupt или это как надо смотреть?



    Плюс к тому же, как я понял у меня PICi8259A а это 15 номеров, ну откуда здесь 256 штук в IDT?
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    ЛОЛ Чувак!!!





    Неужели не видно что и там и там стоит адрес 806b14c0? А имя функции с этим адресом IdtDump показывать не умеет.





    Оттуда, что в IDT может быть дохрена прерываний никак не связаных с железом.



    З.Ы. купи себе очки.
     
  5. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    EvilsInterrupt

    Это еще со времен DOS заведено - таблица прерываний содержит 256 обработчиков, на часть из которых могут быть спроецированны аппаратные прерывания (в некоторых случаях и поболее 15).
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    <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):
    1. kd> u ZwCreateFile
    2. ntdll!NtCreateFile:
    3. 77f89694 b820000000       mov     eax,0x20
    4. 77f89699 8d542404         lea     edx,[esp+0x4]
    5. 77f8969d cd2e             int     2e
    6. 77f8969f c22c00           ret     0x2c
    7.  
    8. kd> u KiSystemService
    9. nt!KiSystemService:
    10. 805428dd 6a00             push    0x0
    11. 805428df 55               push    ebp
    12. 805428e0 53               push    ebx
    13. 805428e1 56               push    esi
    14. 805428e2 57               push    edi
    15. 805428e3 0fa0             push    fs
    16. 805428e5 bb30000000       mov     ebx,0x30
    17. 805428ea 668ee3           mov     fs,bx
    При этом, если все с виду совпадёт, на 100% всё равно нельзя сказать про полное соответствие. Поэтому лучше всего прочесть большой и умный раздел "Symbols" в справке для WinDBG - там все подробно расписано.



    Касательно IDT, доподлинно известно, что большая её часть не используется и !idt покажет нечно вроде этого (если нет, то символы кривые):


    Код (Text):
    1. 40: 80541fc0 (nt!KiUnexpectedInterrupt16)
    2. 41: 80541fca (nt!KiUnexpectedInterrupt17)
    3. 42: 80541fd4 (nt!KiUnexpectedInterrupt18)
    4. 43: 80541fde (nt!KiUnexpectedInterrupt19)
    5. ...
    6. fc: 805426eb (nt!KiUnexpectedInterrupt204)
    7. fd: 805426f2 (nt!KiUnexpectedInterrupt205)
    8. fe: 805426f9 (nt!KiUnexpectedInterrupt206)
    9. ff: 80542700 (nt!KiUnexpectedInterrupt207)


    ЗЫ: IdtDump даже не пытается по символам интерпритировать адреса.