【问题标题】:WinDBG Conditional Breakpoint on NtCreateFileNtCreateFile 上的 WinDBG 条件断点
【发布时间】:2018-08-07 15:48:09
【问题描述】:

使用 WinDBG 调试 Windows 10,我已通过 COM 隧道连接到操作系统。 我在一个正在运行的进程中,想在它试图打开一个名为“MyFile”的特定文件时中断。 我所做的是在 ntdll!NtCreateFile 上添加一个断点,当它中断时,我使用以下命令检查文件名:

dt _OBJECT_PROPERTIES @r8

这给了我:

+ 0x10 ObjectName             : 0xADDRESS_OF_STRING C:/Folder/NotMyFile

问题是这个函数被调用了很多次,所以我的调试太慢了。有没有办法使用 WinDBG 的条件断点自动执行此操作?

【问题讨论】:

  • 试试bp XXXXXX "j ($scmp($r8+0x10,'C:/Folder/NotMyFile')==0) ' '; 'gc' "把XXXXX换成NtCreateFile的地址
  • @EdChum:NtCreateFile 是地址的同义词
  • @EdChum 有没有办法检查“MyFile”是否在字符串中,而不仅仅是直接等于?
  • 使用$spat进行模式匹配:bp XXXXXX "j ($spat($r8+0x10,'C:/Folder/NotMyFile')==0) ' '; 'gc' "docs

标签: windbg


【解决方案1】:

!process 0 0 YourProcessName

Example 

kd> !process 0 0 calc.exe
PROCESS 85c9ed40  SessionId: 1  Cid: 0ae8    Peb: 7ffdd000  ParentCid: 075c
    DirBase: 7e248560  ObjectTable: e44da728  HandleCount:  71.
    Image: calc.exe

从此获取EPROCESS地址

并设置一个特定于进程的断点,例如

bp /p 85c9ed40 nt!NtCreateFile 

这应该会大大减少命中,并且只会在您的进程下调用 NtCreateFile 时中断

仅当您的进程打开许多文件或多次打开此特定文件时才使用条件,否则您将不需要任何条件

【讨论】:

  • 我正在尝试调试 svchost,该过程似乎对 NtCreateFile 做了很多调用,您的回答有所帮助,但我仍然面临太多调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多