提问人:Enki 提问时间:6/2/2023 更新时间:6/3/2023 访问量:114
WinDbg的 |应用程序内存完全转储 - 显示文件句柄的文件路径
WinDbg | Application memory full dump - Show file path of file handle
问:
我使用 创建了一个应用程序的内存转储。
应用程序访问各种文件。procdump -ma abc.exe
我运行并获取了 100 多个文件句柄。
当我获得特定的句柄地址时,我运行以下命令,结果为:!handle 0 f FILE
!handle 000000000000161c f
0:000> !handle 000000000000161c f
Handle 000000000000161c
Type File
Attributes 0
GrantedAccess 0x12019f:
ReadControl,Synch
Read/List,Write/Add,Append/SubDir/CreatePipe,ReadEA,WriteEA,ReadAttr,WriteAttr
HandleCount 2
PointerCount 65479
No object specific information available
是否有机会检索实际的文件路径?像这样的东西: 如何在windbg中通过句柄获取文件路径? 似乎只在内核模式调试中起作用。
答:
2赞
Thomas Weller
6/3/2023
#1
对于事后调试(故障转储分析),没有办法,除非你有内核转储(那时我不能告诉你如何做到这一点)。Windows 将关闭已终止的进程的句柄。
!handle 与 !handleex 结合使用
结合并获得很好的信息。!handle
!handleex
.foreach /pS 1 /ps 1 (file {!handle 0 4 FILE}) { .echo Handle file; !handleex file; .echo }
示例输出
0:007> .foreach /pS 1 /ps 1 (file {!handle 0 4 FILE}) { .echo Handle file; !handleex file; .echo }
Handle 4c
Object Type: File
Handle Name: \Device\HarddiskVolume3\Users\T
Handle 8c
Object Type: File
Handle Name: \Device\HarddiskVolume3\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.1110_none_60b5254171f9507e
Handle b4
Object Type: File
Handle Name: \Device\HarddiskVolume3\Windows\System32\en-US\notepad.exe.mui
...
handle与 SysInternals 句柄结合使用
可以结合使用 WinDbg 命令和 SysInternals 句柄工具。!handle
记事本调试会话示例:
:018> !handle 0 1 FILE
Handle 4c
Type File
Handle 8c
Type File
Handle b8
Type File
Handle 134
Type File
...
结合控制台中的信息:
C:\...>handle -p notepad.exe | findstr 8C:
8C: File C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.1110_none_60b5254171f9507e
C:\...>handle -p notepad.exe | findstr B8:
B8: File C:\Windows\System32\en-US\notepad.exe.mui
自动化它并不真正有效:
0:007> .printf "%d\n",$tpid
2168
0:007> .foreach /pS 1 /ps 1 (file {!handle 0 4 FILE}) { .shell C:\handle.exe -p 2168 | findstr file: }
该过程似乎太慢,需要太多用户输入。
评论
0赞
Neitsa
6/3/2023
谢谢托马斯,我不知道这个扩展!
0赞
Enki
6/4/2023
谢谢你的回答。我将尝试使用 handleex 扩展!:-)
评论