Отладка драйвера.

Тема в разделе "WASM.NT.KERNEL", создана пользователем sysexit, 30 янв 2012.

  1. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Есть VirtualBox + VirtualKD как можно потрейсить код драйвера?

    bp drivername!DriverEntry срабатывает при загрузке драйвера через KMD Manager, но WinDbg останавливается в недрах ядра, pop ebp .... в общем так и не смог до трейсить до точки входа драйвера. Что делаю не так?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    А если нажать 'g' и подождать, пока остановится на точке входа? VBox'ом не пользуюсь, но могу сказать, что в VMWare bp DriverName!DriverEntry спокойно останавливается при загрузке драйвера через sc или I/O менеджером, когда подключаю устройство.

    У WinDbg заметил такую странность: после перезапуска Windows (когда очередной раз система в BSoD улетает :) ) точка останова может не сработать, если ее явно не просмотреть в меню Breakpoints (ALT + F9, WinDbg). С чем это связано не знаю, просто перед загрузкой драйвера останавливаю целевую машину и проверяю наличие точки останова.

    Если хочется экстрима, можно поставить точку останова на IopLoadDriver -- именно она загружает драйвер в память и вызывает его точку входа. (Там должен быть косвенный вызов через DriverObject::lol: riverInit).

    И какой стек (команда kb) в случае остановки в недрах ядра?
     
  3. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Код (Text):
    1. Check for invalid symbols or bad syntax.
    2. WaitForEvent failed
    3. nt!wctomb+0x1c5:
    4. 80506d3f 5d              pop     ebp
    5. kd> g
    6. Breakpoint 0's offset expression evaluation failed.
    7. Check for invalid symbols or bad syntax.
    8. WaitForEvent failed
    9. nt!wctomb+0x1c5:
    10. 80506d3f 5d              pop     ebp
    11. kd> g
    12. Hello world!
    Траcировать по F11 к примеру нельзя пока не уберешь BP. (Сообщения выше).

    После того как убрал BP и нажал F5 (Go) Вывелось сообщение Hello world!. Так что ничего не вышло.


    Код (Text):
    1. kd> kb
    2. ChildEBP RetAddr  Args to Child              
    3. WARNING: Stack unwind information not available. Following frames may be wrong.
    4. fafb7aa4 80506d80 fafb7b3c fafb7ab8 00000003 nt!wctomb+0x1c5
    5. fafb7ac8 805a3133 fafb7b3c fb2ad000 ffffffff nt!DbgLoadImageSymbols+0x38
    6. fafb7c6c 805a37aa fafb7cf0 00000000 00000000 nt!RtlSubAuthoritySid+0x8ff
    7. fafb7d4c 805a3c93 800006c0 00000001 00000000 nt!RtlSubAuthoritySid+0xf76
    8. fafb7d74 804e426b 800006c0 00000000 80eeab30 nt!RtlSubAuthoritySid+0x145f
    9. fafb7dac 8057c9da f8079cf4 00000000 00000000 nt!ExQueueWorkItem+0x104
    10. fafb7ddc 804f88ea 804e4196 00000001 00000000 nt!PsCreateSystemThread+0x70
    11. 00000000 00000000 00000000 00000000 00000000 nt!KeInitializeTimer+0x107
    PS Как в CPL0 загрузить hal.dll к примеру? LdrLoadDll будет работать?
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    [offtop]
    Это не странность, а фича. Называется "квантовый брейкпоинт". Его состояние зависит от факта наблюдения.
    [/offtop]
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    sysexit
    Черт его знает, что там в WinDbg происходит. Для начала можно попробовать ADD(убрать) VirtualKD и посмотреть, что будет. Я так понимаю, что точка останова задается именно с помощью 'bp DriverName!DriverEntry'? При этом отладчик должен сказать, что-то вроде "адрес не найден, adding deferred breakpoint". Ну и после этого надо загрузить драйвер.

    Насчет hal.dll -- модуль уже загружен в адресное прстранство ядра. Ну и LdrLoadDll тут не при чем, ф-ия работает только в user mode.

    l_inc
    В следующей версии WinDbg обещают брейкпойнт Шредингера.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Mika0x65
    Это хитрый маркетинговый ход. Функциональность та же.
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    l_inc
    Ага, я потом сообразил :).