使用MiniDump获取句柄数据(DbgHelp.h)

时间:2016-02-06 14:23:37

标签: c# windows handle minidump dbghelp

我正在努力通过Minidump(DbgHelp.h)获取句柄信息。

我从映射文件流中获取MINIDUMP_HANDLE_DESCRIPTOR_2列表。 然后,我使用MINIDUMP_HANDLE_OBJECT_INFORMATION字段为每个描述符ObjectInfoRva获取。

但是我无法理解这个MINIDUMP_HANDLE_OBJECT_INFORMATION结构给我的信息,我在网上找不到任何从MINIDUMP_HANDLE_OBJECT_INFORMATION中提取有意义信息的例子,而且文档不是很有帮助。

如何使用MINIDUMP_HANDLE_OBJECT_INFORMATION结构数据来获取人类可读的数据?我的意思是我需要做什么呢? 我总是在InfoType提交时获得0,这意味着 - MiniHandleObjectInformationNone

MINIDUMP_HANDLE_OBJECT_INFORMATION struct:

public struct MINIDUMP_HANDLE_OBJECT_INFORMATION
{
    public uint NextInfoRva;
    public MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE InfoType;
    public UInt32 SizeOfInfo;
}

我用MINIDUMP_HANDLE_OBJECT_INFORMATION结构做了一些实验

当我获取结构时,我能够从SizeOfInfo大小的RVA地址读取字符串。在这里,我将“目录”作为字符串显示在我得到的所有句柄描述符上......

链接到doc:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms680375(v=vs.85).aspx

任何帮助将不胜感激:)

我尝试应用它的流程使用WaitForMultipleObjectsWaitForSingleObject Kernel32来电。

链接到我的实施:

https://github.com/Pavel-Durov/Multithreading-Debugging-Asignments/blob/master/Assignments/Assignments.Core/Handlers/MiniDumpHandler.cs

链接到我在同一转储文件上执行的 WinDbg !handle命令输出: https://docs.google.com/document/d/1Hjid-2dcM0aZrg5A1p5VrCBSysU_VQhynXdBAvXV29Q/edit?usp=sharing

也许问题是我没有为我的MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE枚举设置有效值,是否有人熟悉具有此枚举值声明的可靠来源?我没有找到任何正式的东西。

只是为了说清楚。

在WinDbj中,我获得的信息与我从MINIDUMP_HANDLE_DESCRIPTOR_2获得的信息相同, 例如,如果WinDbg!handle命令具有此输出:

Handle 00000004
  Type                   Directory
Handle 00000008
  Type                   Directory
Handle 0000000c
  Type                   Event
Handle 00000010
  Type                   Event
Handle 00000014
  Type                   File
…

我可以从MINIDUMP_HANDLE_DESCRIPTOR_2 ObjectName和TypeName获取MINIDUMP_STRING类型的相同数据。

无法获取的信息是位于MINIDUMP_HANDLE_OBJECT_INFORMATION结构中的信息。这在!hanlde命令输出中不可见。

假设MINIDUMP_HANDLE_OBJECT_INFORMATION中有哪些信息?

1 个答案:

答案 0 :(得分:0)

经过几个小时 - 调试我的托管代码并将其与C ++代码示例进行比较 - 我发现我的MINIDUMP_HANDLE_OBJECT_INFORMATION结构读取错误 - 我没有适当地计算rva + baseMinidump地址。 / p>

现在它可以工作,我能够获得句柄的附加信息:)

Mu代码可以在这里找到: https://github.com/Pavel-Durov/Multithreading-Debugging-Asignments/blob/master/Assignments/Assignments.Core/Handlers/MiniDumpHandler.cs

第144行,DealWithHandleInfo函数