gpt4 book ai didi

如果 WinDbg 附加断点,则驱动程序加载/卸载失败

转载 作者:行者123 更新时间:2023-12-02 07:06:38 25 4
gpt4 key购买 nike

我刚刚开始驱动程序开发。对于一些加载、卸载和调试的实验,我编写了以下简单的驱动程序:

#include <ntddk.h> 

void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
UNREFERENCED_PARAMETER(pDriverObject);
DbgPrint("Driver unloading\n");
}

NTSTATUS DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath)
{
UNREFERENCED_PARAMETER(DriverObject);
UNREFERENCED_PARAMETER(RegistryPath);

DriverObject->DriverUnload = DriverUnload;
DbgPrint("Hello, World\n");

return STATUS_SUCCESS;
}

我使用调试符号为我的目标系统 Windows 7 64 位编译了驱动程序,将其复制到目标系统并使用 OSR Driver Loader 加载并运行它。

一切正常,我可以卸载和加载驱动程序:enter image description here

我可以使用串行连接与WinDbg连接,并且可以成功中断并运行目标系统。但是,当我尝试设置断点时,问题出现了。

我最初尝试像这样设置断点:

kd> bp MyDriver1!DriverEntry

但问题是,如果我重新加载驱动程序并检查断点:

kd> bl
0 e fffff880`03572010 0001 (0001) < Unloaded_MyDriver1.sys >+0x1010

对于我这个初学者来说,它看起来不太好(卸载?)并且加载时没有发生中断。

所以,我发现可以在加载模块时设置断点:

kd> bu MyDriver1

0 e fffff880`03578000 0001 (0001) MyDriver1!DriverEntry < PERF > (MyDriver1+0x0)

当我在上述命令后继续执行系统并加载驱动程序(net start MyDriver1)时,系统崩溃:

Break instruction exception - code 80000003 (first chance)


  • *
  • You are seeing this message because you pressed either *
  • CTRL+C (if you run console kernel debugger) or, *
  • CTRL+BREAK (if you run GUI kernel debugger), *
  • on your debugger machine's keyboard. *
  • *
  • THIS IS NOT A BUG OR A SYSTEM CRASH *
  • *
  • If you did not intend to break into the debugger, press the "g" key, then *
  • press the "Enter" key now. This message might immediately reappear. If it *
  • does, press "g" and "Enter" again. *
  • *

nt!RtlpBreakWithStatusInstruction: fffff800028ca490 cc int 3
kd > bu MyDriver1 kd> bl 0 e fffff880
03572010 0001

(0001) MyDriver1!DriverEntry < PERF > (MyDriver1+0x0)

kd > bc 0 kd> bl 1 e fffff880`03578000 0001 (0001)

MyDriver1!DriverEntry (MyDriver1+0x0)

kd> g Access violation - code c0000005 (!!! second chance !!!)

nt!IopUnloadDriver+0x327: fffff800`02cb8b29 0fb74844 movzx

ecx,word ptr [rax+44h]

最后,如果我现在继续执行,我会得到 BSOD ...

这里出了什么问题?是我的代码错误还是我设置的断点不正确?

最佳答案

您正在寻找的命令是 sxe ld:MyDriver1

当驱动程序映射到内存中但在调用 MyDriver1!DriverEntry 之前,这将中断,并允许您在 DriverEntry 处放置断点。

命令 bu MyDriver1 在驱动程序镜像的 PE header 的第一个字节中放置一个断点。

此外,卸载驱动程序后请清除断点,否则会导致调试器修改可以分配给其他内容的内存。

关于如果 WinDbg 附加断点,则驱动程序加载/卸载失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10962361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com