使用 MiniDump 获取句柄数据 (DbgHelp.h)
Getting handles data with MiniDump (DbgHelp.h)
我正在努力通过 Minidump (DbgHelp.h) 获取句柄信息。
我正在从映射文件流中获取 MINIDUMP_HANDLE_DESCRIPTOR_2
的列表..
然后我通过使用 ObjectInfoRva
字段为每个描述符获取一个 MINIDUMP_HANDLE_OBJECT_INFORMATION
。
但是我无法理解这个 MINIDUMP_HANDLE_OBJECT_INFORMATION
结构给我提供了什么信息,我在网上找不到任何示例来从 MINIDUMP_HANDLE_OBJECT_INFORMATION
中提取有意义的信息,而且文档也不是很清楚有帮助。
如何使用 MINIDUMP_HANDLE_OBJECT_INFORMATION
结构数据来获取人类可读的数据?我的意思是我需要用它做什么?
我总是在提交 InfoType
时得到 0,这意味着 - MiniHandleObjectInformationNone
.
MINIDUMP_HANDLE_OBJECT_INFORMATION 结构:
public struct MINIDUMP_HANDLE_OBJECT_INFORMATION
{
public uint NextInfoRva;
public MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE InfoType;
public UInt32 SizeOfInfo;
}
我用 MINIDUMP_HANDLE_OBJECT_INFORMATION struct
做了一些实验
当我获取结构时,我能够从 RVA 地址读取一个大小为 SizeOfInfo
的字符串。在这里,我得到 'Directory' 作为我得到的所有句柄描述符的字符串...
link 到文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680375(v=vs.85).aspx
任何帮助将不胜感激:)
我尝试应用它的过程使用 WaitForMultipleObjects
和 WaitForSingleObject
Kernel32
调用。
Link 我的实现:
Link 到 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_STRING
类型的 MINIDUMP_HANDLE_DESCRIPTOR_2
ObjectName 和 TypeName 中获取相同的数据。
我无法获取的信息是位于MINIDUMP_HANDLE_OBJECT_INFORMATION
结构中的信息。这在 !hanlde
命令输出中不可见。
什么样的信息应该位于 MINIDUMP_HANDLE_OBJECT_INFORMATION?
经过几个小时的艰难 - 调试我的托管代码并将其与 C++ 代码示例进行比较 - 我发现了 MINIDUMP_HANDLE_OBJECT_INFORMATION
结构读取的错误 - 我没有正确计算 rva + baseMinidump
地址.
现在可以使用了,我可以获取句柄的附加信息:)
第 144 行,DealWithHandleInfo 函数
我正在努力通过 Minidump (DbgHelp.h) 获取句柄信息。
我正在从映射文件流中获取 MINIDUMP_HANDLE_DESCRIPTOR_2
的列表..
然后我通过使用 ObjectInfoRva
字段为每个描述符获取一个 MINIDUMP_HANDLE_OBJECT_INFORMATION
。
但是我无法理解这个 MINIDUMP_HANDLE_OBJECT_INFORMATION
结构给我提供了什么信息,我在网上找不到任何示例来从 MINIDUMP_HANDLE_OBJECT_INFORMATION
中提取有意义的信息,而且文档也不是很清楚有帮助。
如何使用 MINIDUMP_HANDLE_OBJECT_INFORMATION
结构数据来获取人类可读的数据?我的意思是我需要用它做什么?
我总是在提交 InfoType
时得到 0,这意味着 - MiniHandleObjectInformationNone
.
MINIDUMP_HANDLE_OBJECT_INFORMATION 结构:
public struct MINIDUMP_HANDLE_OBJECT_INFORMATION
{
public uint NextInfoRva;
public MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE InfoType;
public UInt32 SizeOfInfo;
}
我用 MINIDUMP_HANDLE_OBJECT_INFORMATION struct
做了一些实验当我获取结构时,我能够从 RVA 地址读取一个大小为 SizeOfInfo
的字符串。在这里,我得到 'Directory' 作为我得到的所有句柄描述符的字符串...
link 到文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680375(v=vs.85).aspx
任何帮助将不胜感激:)
我尝试应用它的过程使用 WaitForMultipleObjects
和 WaitForSingleObject
Kernel32
调用。
Link 我的实现:
Link 到 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_STRING
类型的 MINIDUMP_HANDLE_DESCRIPTOR_2
ObjectName 和 TypeName 中获取相同的数据。
我无法获取的信息是位于MINIDUMP_HANDLE_OBJECT_INFORMATION
结构中的信息。这在 !hanlde
命令输出中不可见。
什么样的信息应该位于 MINIDUMP_HANDLE_OBJECT_INFORMATION?
经过几个小时的艰难 - 调试我的托管代码并将其与 C++ 代码示例进行比较 - 我发现了 MINIDUMP_HANDLE_OBJECT_INFORMATION
结构读取的错误 - 我没有正确计算 rva + baseMinidump
地址.
现在可以使用了,我可以获取句柄的附加信息:)
第 144 行,DealWithHandleInfo 函数