Alexandre Julliard : winedump: Try to load the PDB string table from file number 4 too.

Alexandre Julliard julliard at winehq.org
Wed Jan 12 13:16:50 CST 2011


Module: wine
Branch: master
Commit: 4f574ee942be99c7401a3bef472a81d0f2bb0b5b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4f574ee942be99c7401a3bef472a81d0f2bb0b5b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jan 12 10:45:54 2011 +0100

winedump: Try to load the PDB string table from file number 4 too.

---

 tools/winedump/pdb.c |   32 ++++++++++++++++++--------------
 1 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c
index 5720c40..1b7beeb 100644
--- a/tools/winedump/pdb.c
+++ b/tools/winedump/pdb.c
@@ -155,6 +155,21 @@ static void pdb_exit(struct pdb_reader* reader)
         free((char*)reader->u.ds.toc);
 }
 
+static void *read_string_table(struct pdb_reader* reader)
+{
+    void *ret;
+
+    /* FIXME: how to determine the correct file number? */
+    /* 4 and 12 have been observed, there may be others */
+    ret = reader->read_file(reader, 4);
+    if (ret && *(const DWORD*)ret == 0xeffeeffe) return ret;
+    free( ret );
+    ret = reader->read_file(reader, 12);
+    if (ret && *(const DWORD*)ret == 0xeffeeffe) return ret;
+    free( ret );
+    return NULL;
+}
+
 static void pdb_dump_symbols(struct pdb_reader* reader)
 {
     PDB_SYMBOLS*    symbols;
@@ -224,20 +239,8 @@ static void pdb_dump_symbols(struct pdb_reader* reader)
         dump_data(src, symbols->offset_size, "    ");
     }
 
-    filesimage = reader->read_file(reader, 12);   /* FIXME: really fixed ??? */
-    if (filesimage)
-    {
-        if (*(const DWORD*)filesimage == 0xeffeeffe)
-        {
-            filessize = *(const DWORD*)(filesimage + 8);
-        }
-        else
-        {
-            printf("wrong header %x expecting 0xeffeeffe\n", *(const DWORD*)filesimage);
-            free(filesimage);
-            filesimage = NULL;
-        }
-    }
+    if (!(filesimage = read_string_table(reader))) printf("string table not found\n");
+    else filessize = *(const DWORD*)(filesimage + 8);
 
     if (symbols->srcmodule_size)
     {
@@ -721,6 +724,7 @@ static void pdb_ds_dump(void)
      *  1: root structure
      *  2: types
      *  3: modules
+     *  4: string table (FIXME: in which case?)
      *  5: FPO data
      *  8: segments
      * 10: extended FPO data




More information about the wine-cvs mailing list