Eric Pouech : winedump: Dump segment info out of PDB files.
Alexandre Julliard
julliard at winehq.org
Tue Jan 18 10:27:34 CST 2011
Module: wine
Branch: master
Commit: 2b010ad3665e34ce6a0263ee8d8ea6aab8a3d45c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2b010ad3665e34ce6a0263ee8d8ea6aab8a3d45c
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Mon Jan 17 21:53:42 2011 +0100
winedump: Dump segment info out of PDB files.
---
tools/winedump/pdb.c | 53 +++++++++++++++++++++++++++++--------------------
1 files changed, 31 insertions(+), 22 deletions(-)
diff --git a/tools/winedump/pdb.c b/tools/winedump/pdb.c
index 9f90c89..3baee33 100644
--- a/tools/winedump/pdb.c
+++ b/tools/winedump/pdb.c
@@ -670,6 +670,35 @@ static void pdb_dump_fpo_ext(struct pdb_reader* reader, unsigned stream_idx)
free(strbase);
}
+static void pdb_dump_segments(struct pdb_reader* reader, unsigned stream_idx)
+{
+ const char* segs;
+ DWORD size;
+ const char* ptr;
+
+ if (stream_idx == (WORD)-1) return;
+ segs = reader->read_file(reader, stream_idx);
+
+ if (segs)
+ {
+ size = pdb_get_file_size(reader, stream_idx);
+ for (ptr = segs; ptr < segs + size; )
+ {
+ printf("Segment %s\n", ptr);
+ ptr += (strlen(ptr) + 1 + 3) & ~3;
+ printf("\tdword[0]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[1]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[2]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[3]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[4]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[5]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[6]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ printf("\tdword[7]: %08x\n", *(DWORD*)ptr); ptr += 4;
+ }
+ free((char*)segs);
+ } else printf("nosdfsdffd\n");
+}
+
static const char pdb2[] = "Microsoft C/C++ program database 2.00";
static void pdb_jg_dump(void)
@@ -755,28 +784,7 @@ static void pdb_jg_dump(void)
}
pdb_dump_types(&reader);
pdb_dump_symbols(&reader, &sidx);
-#if 0
- /* segments info, index is unknown */
- {
- const void* segs = pdb_read_file(pdb, toc, 8); /* FIXME which index ??? */
- const void* ptr = segs;
-
- if (segs) while (ptr < segs + toc->file[8].size)
- {
- printf("Segment %s\n", (const char*)ptr);
- ptr += (strlen(ptr) + 1 + 3) & ~3;
- printf("\tdword[0]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[1]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[2]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[3]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[4]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[5]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[6]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- printf("\tdword[7]: %08lx\n", *(DWORD*)ptr); ptr += 4;
- }
- free(segs);
- }
-#endif
+ pdb_dump_segments(&reader, sidx.segments);
}
else printf("-Unable to get root\n");
@@ -921,6 +929,7 @@ static void pdb_ds_dump(void)
pdb_dump_symbols(&reader, &sidx);
pdb_dump_fpo(&reader, sidx.FPO);
pdb_dump_fpo_ext(&reader, sidx.FPO_EXT);
+ pdb_dump_segments(&reader, sidx.segments);
}
else printf("-Unable to get root\n");
More information about the wine-cvs
mailing list