Есть VirtualBox + VirtualKD как можно потрейсить код драйвера? bp drivername!DriverEntry срабатывает при загрузке драйвера через KMD Manager, но WinDbg останавливается в недрах ядра, pop ebp .... в общем так и не смог до трейсить до точки входа драйвера. Что делаю не так?
А если нажать 'g' и подождать, пока остановится на точке входа? VBox'ом не пользуюсь, но могу сказать, что в VMWare bp DriverName!DriverEntry спокойно останавливается при загрузке драйвера через sc или I/O менеджером, когда подключаю устройство. У WinDbg заметил такую странность: после перезапуска Windows (когда очередной раз система в BSoD улетает ) точка останова может не сработать, если ее явно не просмотреть в меню Breakpoints (ALT + F9, WinDbg). С чем это связано не знаю, просто перед загрузкой драйвера останавливаю целевую машину и проверяю наличие точки останова. Если хочется экстрима, можно поставить точку останова на IopLoadDriver -- именно она загружает драйвер в память и вызывает его точку входа. (Там должен быть косвенный вызов через DriverObject:riverInit). И какой стек (команда kb) в случае остановки в недрах ядра?
Код (Text): Check for invalid symbols or bad syntax. WaitForEvent failed nt!wctomb+0x1c5: 80506d3f 5d pop ebp kd> g Breakpoint 0's offset expression evaluation failed. Check for invalid symbols or bad syntax. WaitForEvent failed nt!wctomb+0x1c5: 80506d3f 5d pop ebp kd> g Hello world! Траcировать по F11 к примеру нельзя пока не уберешь BP. (Сообщения выше). После того как убрал BP и нажал F5 (Go) Вывелось сообщение Hello world!. Так что ничего не вышло. Код (Text): kd> kb ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. fafb7aa4 80506d80 fafb7b3c fafb7ab8 00000003 nt!wctomb+0x1c5 fafb7ac8 805a3133 fafb7b3c fb2ad000 ffffffff nt!DbgLoadImageSymbols+0x38 fafb7c6c 805a37aa fafb7cf0 00000000 00000000 nt!RtlSubAuthoritySid+0x8ff fafb7d4c 805a3c93 800006c0 00000001 00000000 nt!RtlSubAuthoritySid+0xf76 fafb7d74 804e426b 800006c0 00000000 80eeab30 nt!RtlSubAuthoritySid+0x145f fafb7dac 8057c9da f8079cf4 00000000 00000000 nt!ExQueueWorkItem+0x104 fafb7ddc 804f88ea 804e4196 00000001 00000000 nt!PsCreateSystemThread+0x70 00000000 00000000 00000000 00000000 00000000 nt!KeInitializeTimer+0x107 PS Как в CPL0 загрузить hal.dll к примеру? LdrLoadDll будет работать?
[offtop] Это не странность, а фича. Называется "квантовый брейкпоинт". Его состояние зависит от факта наблюдения. [/offtop]
sysexit Черт его знает, что там в WinDbg происходит. Для начала можно попробовать ADD(убрать) VirtualKD и посмотреть, что будет. Я так понимаю, что точка останова задается именно с помощью 'bp DriverName!DriverEntry'? При этом отладчик должен сказать, что-то вроде "адрес не найден, adding deferred breakpoint". Ну и после этого надо загрузить драйвер. Насчет hal.dll -- модуль уже загружен в адресное прстранство ядра. Ну и LdrLoadDll тут не при чем, ф-ия работает только в user mode. l_inc В следующей версии WinDbg обещают брейкпойнт Шредингера.