IDT - как вывести адрес первого обработчика

Тема в разделе "WASM.BEGINNERS", создана пользователем _animaTOR_, 11 сен 2008.

  1. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    Пытаюсь прочитать адрес первого обработчика в IDT
    Постоянно вылетаю с синим экраном
    Что не так - подскажите, прямо мистика какая-то :dntknw:

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  include \masm32\include\w2k\ntstatus.inc
    5.  include \masm32\include\w2k\ntifs.inc
    6.  include \masm32\include\w2k\ntoskrnl.inc
    7.  includelib \masm32\lib\w2k\ntoskrnl.lib
    8.  
    9.  include \masm32\Macros\Strings.mac
    10. .data
    11.     DIDTR   STRUCT      ;IDTR
    12.         Limit       WORD    ?
    13.         Base        DWORD   ?
    14.     DIDTR   ENDS
    15.  
    16.  
    17.     idt DIDTR <>
    18. .code
    19.  
    20. DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    21.     cli
    22.     sidt    idt    
    23.     mov ecx, idt.Base
    24.     mov ebx,[ecx+4]    ; Получаем в EBX старшее и...
    25.     mov bx, [ecx+0]    ; младшее слово адреса обработчика
    26.     sti
    27.     invoke  DbgPrint, $CTA0("INT - 0: Vector 0x%08X"),ebx
    28.     mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    29.     ret
    30. DriverEntry endp
    31. end DriverEntry
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    _animaTOR_
    Закомментируй "invoke DbgPrint, $CTA0("INT - 0: Vector 0x%08X"),ebx" и посмотри, будет ли bsod.
     
  3. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    может быть сделать uses какие-нить регистры, ecx например

    add: вот только что проверил, без push pop edi bsod
     
  4. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    значит правило такое?
    - резервировать ( uses или push pop) все регистры с которыми работаешь ?
     
  5. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    twgt
    Закомментируй "invoke DbgPrint
    ... да без этого не падает :) спасибо.
    defaultplayer
    ... да ты прав, надо писать так
    Код:
    Код (Text):
    1.  
    2. DriverEntry proc Uses EBX ECX ESI EDI pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    так работает даже с invoke DbgPrint :) спасибо.
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    нет. Только в eax статус вернуть нужно. [del]
    [...отжигаю сегодня....]
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    как бе еще cinvoke лучше делать.
     
  8. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    n0name
    можно поточнее - Вы имели в виду
    сinvoke DbgPrint, $CTA0("INT - 0: Vector 0x%08X"),ebx - ?
     
  9. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    _animaTOR_
    cinvoke - значит что стек восстанавливает функция, которая вызывает.
    В частном случае равносильно
    Код (Text):
    1. invoke  DbgPrint, $CTA0("INT - 0: Vector 0x%08X"),ebx
    2. add esp,0x08
     
  10. _animaTOR_

    _animaTOR_ New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    58
    twgt
    как Вы отлаживаете код драйвера.
    Я тут прочитал, что все делается на вирт. машине с подключенным windbg.
    Вот и я
    - запускаю на вирт. машине XP в ржиме отладчика
    - подключаюсь windbg - а у XP - виснет и мышь и клава.

    так и надо ? а как тогда драйвер запустить на WM?
    Где вообще почитать про команды этого windbg на русском?
     
  11. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    _animaTOR_
    У меня на VmWare стоит отладчик Syser. Довольно удобно. Просто выбираю драйвер и жму Load.
    А windbg не пользовался никогда, но тут на форуме он обсуждался.
     
  12. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    twgt
    У меня работает так
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  include \masm32\include\w2k\ntstatus.inc
    5.  include \masm32\include\w2k\ntifs.inc
    6.  include \masm32\include\w2k\ntoskrnl.inc
    7.  includelib \masm32\lib\w2k\ntoskrnl.lib
    8.  include \masm32\Macros\Strings.mac
    9. .data
    10.     DIDTR   STRUCT      ;IDTR
    11.         Limit       WORD    ?
    12.         Base        DWORD   ?
    13.     DIDTR   ENDS
    14.     IDTENTRY STRUCT
    15.         LowOffset       WORD    ?
    16.         Selector        WORD    ?
    17.         Access      WORD    ?
    18.         HiOffset        WORD    ?
    19.     IDTENTRY ENDS
    20.     idt DIDTR <>
    21. .code
    22. DriverEntry proc Uses EBX ECX EDX ESI EDI pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    23.     xor edx,edx
    24.     xor ecx,ecx
    25.     cli
    26.     sidt    idt    
    27.     sti
    28.     mov edx, idt.Base
    29.     assume  edx:ptr IDTENTRY
    30.     .while  cx  != 256
    31.         cli
    32.         movzx   eax,word   ptr [edx].LowOffset
    33.         movzx   ebx,word   ptr [edx].HiOffset
    34.         sti
    35.         shl ebx, 16
    36.         or  eax, ebx
    37.         push    ecx
    38.         push    edx
    39.         invoke  DbgPrint, $CTA0("INT - %d: Vector 0x%08X\n"), ecx, eax
    40.         pop edx
    41.         pop ecx
    42.         add edx,8; = sizeof IDTENTRY   
    43.         inc ecx
    44.     .endw
    45.     assume  edx:nothing
    46.     mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    47.     ret
    48. DriverEntry endp
    49. end DriverEntry
     
  13. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    twgt
    Странно, сам Syser выдал таблицу IDT так
    как и пример от FourF
    [​IMG]
    [​IMG]
    Пример из "Д.Колесниченко. Руткиты под Windows"
    ... и этот на asm-е выдают одно и тоже
    [​IMG]


    Чувствуется что прав Syser и FourF. Тогда что не так в этом верхнем примере?
     
  14. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    ФАнтастика! Сегодня ВСЕ вывелось правильно!!!!!