Nikolay Sivov : winedump: Output minidump streams in order they appear in the file.

Alexandre Julliard julliard at winehq.org
Wed May 18 15:38:30 CDT 2022


Module: wine
Branch: master
Commit: 38d7ea5c6fd997fcdc505858a571687d14e6444e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=38d7ea5c6fd997fcdc505858a571687d14e6444e

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue May 17 22:20:35 2022 +0300

winedump: Output minidump streams in order they appear in the file.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/winedump/minidump.c | 39 +++++++++++++--------------------------
 1 file changed, 13 insertions(+), 26 deletions(-)

diff --git a/tools/winedump/minidump.c b/tools/winedump/minidump.c
index b834ec887e4..efc91bfdbfd 100644
--- a/tools/winedump/minidump.c
+++ b/tools/winedump/minidump.c
@@ -40,21 +40,6 @@ static void dump_mdmp_string(DWORD rva)
         printf("<<?>>");
 }
 
-static const MINIDUMP_DIRECTORY* get_mdmp_dir(const MINIDUMP_HEADER* hdr, unsigned int str_idx)
-{
-    const MINIDUMP_DIRECTORY*   dir;
-    unsigned int                i;
-
-    for (i = 0; i < hdr->NumberOfStreams; i++)
-    {
-        dir = PRD(hdr->StreamDirectoryRva + i * sizeof(MINIDUMP_DIRECTORY), 
-                  sizeof(MINIDUMP_DIRECTORY));
-        if (!dir) continue;
-        if (dir->StreamType == str_idx) return dir;
-    }
-    return NULL;
-}
-
 enum FileSig get_kind_mdmp(void)
 {
     const DWORD*        pdw;
@@ -69,9 +54,9 @@ enum FileSig get_kind_mdmp(void)
 void mdmp_dump(void)
 {
     const MINIDUMP_HEADER*      hdr = PRD(0, sizeof(MINIDUMP_HEADER));
-    UINT                        idx, ndir = 0;
     const MINIDUMP_DIRECTORY*   dir;
     const void*                 stream;
+    unsigned int idx;
 
     if (!hdr)
     {
@@ -79,27 +64,29 @@ void mdmp_dump(void)
         return;
     }
 
-    printf("Signature: %u (%.4s)\n", (UINT)hdr->Signature, (const char*)&hdr->Signature);
-    printf("Version: %x\n", (UINT)hdr->Version);
-    printf("NumberOfStreams: %u\n", (UINT)hdr->NumberOfStreams);
+    printf("Signature: %#x (%.4s)\n", hdr->Signature, (const char*)&hdr->Signature);
+    printf("Version: %#x\n", hdr->Version);
+    printf("NumberOfStreams: %u\n", hdr->NumberOfStreams);
     printf("StreamDirectoryRva: %u\n", (UINT)hdr->StreamDirectoryRva);
-    printf("CheckSum: %u\n", (UINT)hdr->CheckSum);
+    printf("CheckSum: %u\n", hdr->CheckSum);
     printf("TimeDateStamp: %s\n", get_time_str(hdr->TimeDateStamp));
     printf("Flags: %x%08x\n", (UINT)(hdr->Flags >> 32), (UINT)hdr->Flags);
 
-    for (idx = 0; idx <= LastReservedStream; idx++)
+    for (idx = 0; idx < hdr->NumberOfStreams; ++idx)
     {
-        if (!(dir = get_mdmp_dir(hdr, idx))) continue;
+        dir = PRD(hdr->StreamDirectoryRva + idx * sizeof(MINIDUMP_DIRECTORY), sizeof(*dir));
+        if (!dir) break;
 
         stream = PRD(dir->Location.Rva, dir->Location.DataSize);
-        printf("Directory [%u]: ", ndir++);
+
+        printf("Stream [%u]: ", idx);
         switch (dir->StreamType)
         {
         case ThreadListStream:
         {
-            const MINIDUMP_THREAD_LIST* mtl = (const MINIDUMP_THREAD_LIST*)stream;
-            const MINIDUMP_THREAD*      mt = mtl->Threads;
-            unsigned int                i;
+            const MINIDUMP_THREAD_LIST *mtl = stream;
+            const MINIDUMP_THREAD *mt = mtl->Threads;
+            unsigned int i;
 
             printf("Threads: %u\n", (UINT)mtl->NumberOfThreads);
             for (i = 0; i < mtl->NumberOfThreads; i++, mt++)




More information about the wine-cvs mailing list