在WOW64中捕获HANDLE创建

Ben*_*igt 6 windows winapi windbg wow64 handle

我正在尝试解决第三方二进制文件的缓慢启动问题(无源).它是在64位Windows 7上运行的32位应用程序.

我已经使用调试器进入应用程序,而它在启动期间挂起了0%的CPU使用率,它似乎正在等待ReadFile返回.第一个参数ReadFile是句柄值000000f0.windbg的!handle命令告诉我:

Handle f0
  Type            File
  Attributes      0
  GrantedAccess   0x120189:
         ReadControl,Synch
         Read/List,ReadEA,ReadAttr,WriteAttr
  HandleCount     2
  PointerCount    4
  No Object Specific Information available
Run Code Online (Sandbox Code Playgroud)

我想知道这对应的设备.但是,Sysinternals Process Explorer在其进程句柄列表中不包含此句柄.

我使用windbg跟踪所有调用ntdll!NtCreateFile并打印路径并返回句柄:此句柄不在其中.断点on kernel32!CreateNamedPipeW,kernel32!CallNamedPipeWkernel32!WaitNamedPipeW永远不会被触发(这很奇怪,因为Process Explorer确实显示了另一个带路径的句柄\Device\NamedPipe\).

作为参考,这是在Windows x64上跟踪NtCreateFile(akak ZwCreateFile)的命令:

bp ntdll!NtCreateFile "!ustr poi(@r8+10) ; r $t0 = @rcx ; gu ; dd @$t0 L1 ; gc"
Run Code Online (Sandbox Code Playgroud)

感谢Skywing指出我正确的方向.

还有File哪种类型的HANDLE 来自哪里?不要将其他HANDLE创建函数委托给NtCreateFile实际的系统调用(我猜不是)?

Zip*_*per 1

看起来只有在进行内核调试时才能获取文件句柄信息。所以有3个选择。

  1. 进行本地计算机内核调试,这应该不是问题,因为您只需要获取文件句柄信息并且该信息将保持静态。请参阅以下内容:http://msdn.microsoft.com/en-us/library/windows/hardware/ff553382 (v=vs.85).aspx
  2. 对虚拟机进行远程内核调试。“更安全”是指你不能炸毁你的机器。
  3. 蓝屏你的盒子并以这种方式查看转储。同样,这对你的盒子来说并不是一件好事,但是当我需要能够在不改变机器状态的情况下对机器进行全面分析时,我过去也做过类似的事情。