From 0327b00d10f966da0a659cc57380d326a9ff576c Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sun, 14 Apr 2024 09:44:15 +0200 Subject: [PATCH] winedump: Dump correct handle information for minidump. Signed-off-by: Eric Pouech --- include/minidumpapiset.h | 7 +++++++ tools/winedump/minidump.c | 20 +++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/include/minidumpapiset.h b/include/minidumpapiset.h index 2d13c6f6a67..c3cd43310ae 100644 --- a/include/minidumpapiset.h +++ b/include/minidumpapiset.h @@ -392,6 +392,13 @@ typedef struct _MINIDUMP_HANDLE_DESCRIPTOR ULONG32 PointerCount; } MINIDUMP_HANDLE_DESCRIPTOR, *PMINIDUMP_HANDLE_DESCRIPTOR; +typedef struct _MINIDUMP_HANDLE_OBJECT_INFORMATION +{ + RVA NextInfoRva; + ULONG32 InfoType; + ULONG32 SizeOfInfo; +} MINIDUMP_HANDLE_OBJECT_INFORMATION; + typedef struct _MINIDUMP_HANDLE_DESCRIPTOR_2 { ULONG64 Handle; diff --git a/tools/winedump/minidump.c b/tools/winedump/minidump.c index 80900e3eb33..0a5ee15412b 100644 --- a/tools/winedump/minidump.c +++ b/tools/winedump/minidump.c @@ -499,8 +499,26 @@ void mdmp_dump(void) if (mhd->SizeOfDescriptor >= sizeof(MINIDUMP_HANDLE_DESCRIPTOR_2)) { - printf(" ObjectInfo: %s\n", get_mdmp_str(hd->ObjectInfoRva)); + MINIDUMP_HANDLE_OBJECT_INFORMATION *obj_info; + unsigned link_count = 0; + + printf(" ObjectInfo: %#x\n", (UINT)hd->ObjectInfoRva); printf(" Reserved0: %#x\n", hd->Reserved0); + + if (hd->ObjectInfoRva) + { + for (obj_info = (void*)PRD(hd->ObjectInfoRva, sizeof(*obj_info)); + obj_info; + obj_info = obj_info->NextInfoRva ? (void*)PRD(obj_info->NextInfoRva, sizeof(*obj_info)) : NULL) + { + printf(" Information[%u]\n", link_count++); + printf(" NextInfoRva: %#x\n", (UINT)obj_info->NextInfoRva); + printf(" InfoType: %u\n", obj_info->InfoType); + printf(" SizeOfInfo: %u\n", obj_info->SizeOfInfo); + if (globals_dump_sect("content")) + dump_data((const BYTE*)(obj_info + 1), obj_info->SizeOfInfo, " "); + } + } } ptr += mhd->SizeOfDescriptor;