![](/img/trans.png)
[英]How do I get locale information about logged-in user from an administrator process on Windows XP in c++?
[英]How do I get handles information from a full-dump of a windows process?
我正在尝试调试可能是句柄泄漏的问题。 我在远程 windows 机器上创建了一个转储,我想查看句柄信息。 我正在使用 WinDbg。 我从 MSDN 和其他来源看到了一些文章,例如https://www.codeproject.com/Articles/6988/Debug-Tutorial-Part-5-Handle-Leaks ,但我无法让它工作,所以我需要一些帮助。 我尝试了下一个
no export handles found
,要么无法加载 kdexts。 显然 kernel 调试未启用。.load kdexts
产生 `DebugExtensionInitializeFailed1,错误代码为 0x80004005。?handle -?
我得到了命令的帮助,但是当我尝试别的东西时,我得到“无法读取句柄信息”。 例如,!handle
- 我希望有完整的句柄列表!handle 0 0
!handle 0 0 file
我的设置
如果可能的话,我需要一些帮助
!handle
命令?我会很感激任何帮助!tamir
您的转储可能是没有句柄信息的转储
您可以使用windbg安装附带的dumpchk.exe来查看转储中是否存在Handle Stream
如果您可以控制转储创建检查如何使用.dump / ma with windbg
或者您也可以探索 sysinternals procdump.exe
并确保您为有问题的转储使用正确的位调试器
示例路径
D:\>dir /s /b "c:\Program Files (x86)\Windows Kits\10\Debuggers\cdb.exe"
c:\Program Files (x86)\Windows Kits\10\Debuggers\arm\cdb.exe
c:\Program Files (x86)\Windows Kits\10\Debuggers\arm64\cdb.exe
c:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
c:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe
这是在转储中使用和不使用句柄 stream 创建的示例转储
:000> .dump /ma d:\madump.dmp
Creating d:\madump.dmp - mini user dump
Dump successfully written
0:000> .dump d:\nomadump.dmp
Creating d:\nomadump.dmp - mini user dump
Dump successfully written
0:000> q
使用 dumpchk 分析转储并检查存在的流
dumpchk nomadump.dmp > nomachk.txt
dumpchk madump.dmp > machk.txt
D:\>type machk.txt |grep -i number.*stream
NumberOfStreams 17
D:\>type nomachk.txt |grep -i number.*stream
NumberOfStreams 13
差异
D:\>diff -y machk.txt nomachk.txt
Microsoft (R) Windows Debugger Version 10.0.17763.132 AMD64 Microsoft (R) Windows Debugger Version 10.0.17763.132 AMD64
Loading Dump File [D:\madump.dmp] | Loading Dump File [D:\nomadump.dmp]
User Mini Dump File with Full Memory: Only application d | User Mini Dump File: Only registers, stack and portions of me
----- User Mini Dump Analysis ----- User Mini Dump Analysis
MINIDUMP_HEADER: MINIDUMP_HEADER:
Version A793 (A063) Version A793 (A063)
NumberOfStreams 17 | NumberOfStreams 13
Flags 441826 | Flags 40000
0002 MiniDumpWithFullMemory <
0004 MiniDumpWithHandleData <
0020 MiniDumpWithUnloadedModules <
0800 MiniDumpWithFullMemoryInfo <
1000 MiniDumpWithThreadInfo <
40000 MiniDumpWithTokenInformation 40000 MiniDumpWithTokenInformation
400000 MiniDumpWithIptTrace <
如果您觉得有进取心,请查看这里以获取一些提示,以在没有 windbg /dbgeng 的情况下破译转储
忘记发布在两个转储上执行 !handle 的结果
D:\>cdb -c "!handle;q" -z nomadump.dmp |awk /Reading/,/quit/"
0:000> cdb: Reading initial command '!handle;q'
ERROR: !handle: extension exception 0x80004002.
"Unable to read handle information"
quit:
D:\>cdb -c "!handle;q" -z madump.dmp |awk /Reading/,/quit/"
0:000> cdb: Reading initial command '!handle;q'
Handle 0000000000000004
Type File
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSNIPxxxxxxxxx
Handle 0000000000000128
Type Mutant
Handle 000000000000012c
Type
Handle 0000000000000180
Type File
70 Handles
Type Count
None 27
Event 13
File 8
Directory 2
Mutant 1
Semaphore 2
Key 6
IoCompletion 2
TpWorkerFactory 2
ALPC Port 1
WaitCompletionPacket 6
quit:
检查用于创建故障转储的工具。 也许它提供了一个包含句柄数据的选项。
任务管理器默认包含句柄数据
Visual Studio 默认包含句柄数据
在 WinDbg 中, .dump
可以与/mh
开关一起使用以包含句柄数据。 /ma
是/mfFhut
的快捷方式,因此它还包括句柄数据。
ProcDump自动包含句柄数据。
Windows 错误报告LocalDumps可以使用名为CustomDumpFlags
的注册表值进行配置。
如果您使用MiniDumpWriteDump()
以编程方式自己创建转储,请使用MINIDUMP_TYPE
::MiniDumpWithHandleData
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.