Commit bbef1cbd authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

winedump: Removed cvinclude.h.

parent 4141eafb
...@@ -2295,34 +2295,35 @@ BOOL pdb_fetch_file_info(struct pdb_lookup* pdb_lookup) ...@@ -2295,34 +2295,35 @@ BOOL pdb_fetch_file_info(struct pdb_lookup* pdb_lookup)
static BOOL codeview_process_info(const struct process* pcs, static BOOL codeview_process_info(const struct process* pcs,
const struct msc_debug_info* msc_dbg) const struct msc_debug_info* msc_dbg)
{ {
const CODEVIEW_HEADER_NBxx* cv = (const CODEVIEW_HEADER_NBxx*)msc_dbg->root; const DWORD* signature = (const DWORD*)msc_dbg->root;
BOOL ret = FALSE; BOOL ret = FALSE;
struct pdb_lookup pdb_lookup; struct pdb_lookup pdb_lookup;
TRACE("Processing signature %.4s\n", (const char*)&cv->dwSignature); TRACE("Processing signature %.4s\n", (const char*)signature);
switch (cv->dwSignature) switch (*signature)
{ {
case CODEVIEW_NB09_SIG: case CODEVIEW_NB09_SIG:
case CODEVIEW_NB11_SIG: case CODEVIEW_NB11_SIG:
{ {
const CV_DIRECTORY_HEADER* hdr = (const CV_DIRECTORY_HEADER*)(msc_dbg->root + cv->lfoDirectory); const OMFSignature* cv = (const OMFSignature*)msc_dbg->root;
const CV_DIRECTORY_ENTRY* ent; const OMFDirHeader* hdr = (const OMFDirHeader*)(msc_dbg->root + cv->filepos);
const CV_DIRECTORY_ENTRY* prev; const OMFDirEntry* ent;
const CV_DIRECTORY_ENTRY* next; const OMFDirEntry* prev;
const OMFDirEntry* next;
unsigned int i; unsigned int i;
codeview_init_basic_types(msc_dbg->module); codeview_init_basic_types(msc_dbg->module);
for (i = 0; i < hdr->cDir; i++) for (i = 0; i < hdr->cDir; i++)
{ {
ent = (const CV_DIRECTORY_ENTRY*)((const BYTE*)hdr + hdr->cbDirHeader + i * hdr->cbDirEntry); ent = (const OMFDirEntry*)((const BYTE*)hdr + hdr->cbDirHeader + i * hdr->cbDirEntry);
if (ent->subsection == sstGlobalTypes) if (ent->SubSection == sstGlobalTypes)
{ {
const CV_ENTRY_GLOBAL_TYPES* types; const OMFGlobalTypes* types;
struct codeview_type_parse ctp; struct codeview_type_parse ctp;
types = (const CV_ENTRY_GLOBAL_TYPES*)(msc_dbg->root + ent->lfo); types = (const OMFGlobalTypes*)(msc_dbg->root + ent->lfo);
ctp.module = msc_dbg->module; ctp.module = msc_dbg->module;
ctp.offset = (const DWORD*)(types + 1); ctp.offset = (const DWORD*)(types + 1);
ctp.num = types->cTypes; ctp.num = types->cTypes;
...@@ -2337,15 +2338,15 @@ static BOOL codeview_process_info(const struct process* pcs, ...@@ -2337,15 +2338,15 @@ static BOOL codeview_process_info(const struct process* pcs,
} }
} }
ent = (const CV_DIRECTORY_ENTRY*)((const BYTE*)hdr + hdr->cbDirHeader); ent = (const OMFDirEntry*)((const BYTE*)hdr + hdr->cbDirHeader);
for (i = 0; i < hdr->cDir; i++, ent = next) for (i = 0; i < hdr->cDir; i++, ent = next)
{ {
next = (i == hdr->cDir-1) ? NULL : next = (i == hdr->cDir-1) ? NULL :
(const CV_DIRECTORY_ENTRY*)((const BYTE*)ent + hdr->cbDirEntry); (const OMFDirEntry*)((const BYTE*)ent + hdr->cbDirEntry);
prev = (i == 0) ? NULL : prev = (i == 0) ? NULL :
(const CV_DIRECTORY_ENTRY*)((const BYTE*)ent - hdr->cbDirEntry); (const OMFDirEntry*)((const BYTE*)ent - hdr->cbDirEntry);
if (ent->subsection == sstAlignSym) if (ent->SubSection == sstAlignSym)
{ {
/* /*
* Check the next and previous entry. If either is a * Check the next and previous entry. If either is a
...@@ -2357,13 +2358,13 @@ static BOOL codeview_process_info(const struct process* pcs, ...@@ -2357,13 +2358,13 @@ static BOOL codeview_process_info(const struct process* pcs,
struct codeview_linetab* linetab = NULL; struct codeview_linetab* linetab = NULL;
if (next && next->iMod == ent->iMod && if (next && next->iMod == ent->iMod &&
next->subsection == sstSrcModule) next->SubSection == sstSrcModule)
linetab = codeview_snarf_linetab(msc_dbg->module, linetab = codeview_snarf_linetab(msc_dbg->module,
msc_dbg->root + next->lfo, next->cb, msc_dbg->root + next->lfo, next->cb,
TRUE); TRUE);
if (prev && prev->iMod == ent->iMod && if (prev && prev->iMod == ent->iMod &&
prev->subsection == sstSrcModule) prev->SubSection == sstSrcModule)
linetab = codeview_snarf_linetab(msc_dbg->module, linetab = codeview_snarf_linetab(msc_dbg->module,
msc_dbg->root + prev->lfo, prev->cb, msc_dbg->root + prev->lfo, prev->cb,
TRUE); TRUE);
...@@ -2387,7 +2388,7 @@ static BOOL codeview_process_info(const struct process* pcs, ...@@ -2387,7 +2388,7 @@ static BOOL codeview_process_info(const struct process* pcs,
case CODEVIEW_NB10_SIG: case CODEVIEW_NB10_SIG:
{ {
const CODEVIEW_PDB_DATA* pdb = (const CODEVIEW_PDB_DATA*)(cv + 1); const CODEVIEW_PDB_DATA* pdb = (const CODEVIEW_PDB_DATA*)msc_dbg->root;
pdb_lookup.filename = pdb->name; pdb_lookup.filename = pdb->name;
pdb_lookup.kind = PDB_JG; pdb_lookup.kind = PDB_JG;
pdb_lookup.u.jg.timestamp = pdb->timestamp; pdb_lookup.u.jg.timestamp = pdb->timestamp;
...@@ -2398,7 +2399,7 @@ static BOOL codeview_process_info(const struct process* pcs, ...@@ -2398,7 +2399,7 @@ static BOOL codeview_process_info(const struct process* pcs,
} }
case CODEVIEW_RSDS_SIG: case CODEVIEW_RSDS_SIG:
{ {
const CODEVIEW_HEADER_RSDS* rsds = (const CODEVIEW_HEADER_RSDS*)msc_dbg->root; const OMFSignatureRSDS* rsds = (const OMFSignatureRSDS*)msc_dbg->root;
TRACE("Got RSDS type of PDB file: guid=%s unk=%08x name=%s\n", TRACE("Got RSDS type of PDB file: guid=%s unk=%08x name=%s\n",
wine_dbgstr_guid(&rsds->guid), rsds->unknown, rsds->name); wine_dbgstr_guid(&rsds->guid), rsds->unknown, rsds->name);
...@@ -2411,14 +2412,14 @@ static BOOL codeview_process_info(const struct process* pcs, ...@@ -2411,14 +2412,14 @@ static BOOL codeview_process_info(const struct process* pcs,
break; break;
} }
default: default:
ERR("Unknown CODEVIEW signature %08X in module %s\n", ERR("Unknown CODEVIEW signature %.4s in module %s\n",
cv->dwSignature, msc_dbg->module->module.ModuleName); (const char*)signature, msc_dbg->module->module.ModuleName);
break; break;
} }
if (ret) if (ret)
{ {
msc_dbg->module->module.CVSig = cv->dwSignature; msc_dbg->module->module.CVSig = *signature;
memcpy(msc_dbg->module->module.CVData, cv, memcpy(msc_dbg->module->module.CVData, msc_dbg->root,
sizeof(msc_dbg->module->module.CVData)); sizeof(msc_dbg->module->module.CVData));
} }
return ret; return ret;
......
...@@ -1565,65 +1565,70 @@ extern BOOL coff_process_info(const struct msc_debug_info* msc_dbg); ...@@ -1565,65 +1565,70 @@ extern BOOL coff_process_info(const struct msc_debug_info* msc_dbg);
#define sstFileIndex 0x133 #define sstFileIndex 0x133
#define sstStaticSym 0x134 #define sstStaticSym 0x134
typedef struct _CODEVIEW_HEADER_NBxx /* overall structure information */
typedef struct OMFSignature
{ {
DWORD dwSignature; char Signature[4];
DWORD lfoDirectory; long filepos;
} CODEVIEW_HEADER_NBxx,* PCODEVIEW_HEADER_NBxx; } OMFSignature;
typedef struct _CODEVIEW_HEADER_RSDS typedef struct OMFSignatureRSDS
{ {
DWORD dwSignature; char Signature[4];
GUID guid; GUID guid;
DWORD unknown; DWORD unknown;
CHAR name[1]; CHAR name[1];
} CODEVIEW_HEADER_RSDS,* PCODEVIEW_HEADER_RSDS; } OMFSignatureRSDS;
typedef struct _CODEVIEW_PDB_DATA typedef struct _CODEVIEW_PDB_DATA
{ {
char Signature[4];
long filepos;
DWORD timestamp; DWORD timestamp;
DWORD unknown; DWORD unknown;
CHAR name[1]; CHAR name[1];
} CODEVIEW_PDB_DATA, *PCODEVIEW_PDB_DATA; } CODEVIEW_PDB_DATA, *PCODEVIEW_PDB_DATA;
typedef struct _CV_DIRECTORY_HEADER typedef struct OMFDirHeader
{ {
WORD cbDirHeader; WORD cbDirHeader;
WORD cbDirEntry; WORD cbDirEntry;
DWORD cDir; DWORD cDir;
DWORD lfoNextDir; DWORD lfoNextDir;
DWORD flags; DWORD flags;
} CV_DIRECTORY_HEADER, *PCV_DIRECTORY_HEADER; } OMFDirHeader;
typedef struct _CV_DIRECTORY_ENTRY typedef struct OMFDirEntry
{ {
WORD subsection; WORD SubSection;
WORD iMod; WORD iMod;
DWORD lfo; DWORD lfo;
DWORD cb; DWORD cb;
} CV_DIRECTORY_ENTRY, *PCV_DIRECTORY_ENTRY; } OMFDirEntry;
typedef struct _CV_ENTRY_MODULE_SEGINFO /* sstModule subsection */
typedef struct OMFSegDesc
{ {
WORD seg; WORD Seg;
WORD pad; WORD pad;
DWORD offset; DWORD Off;
DWORD cbSeg; DWORD cbSeg;
} CV_ENTRY_MODULE_SEGINFO; } OMFSegDesc;
typedef struct _CV_ENTRY_MODULE typedef struct OMFModule
{ {
WORD ovlNumber; WORD ovlNumber;
WORD iLib; WORD iLib;
WORD cSeg; WORD cSeg;
WORD Style; char Style[2];
/* /*
CV_ENTRY_MODULE_SEGINFO SegInfo[cSeg]; OMFSegDesc SegInfo[cSeg];
p_string Name; p_string Name;
*/ */
} CV_ENTRY_MODULE; } OMFModule;
typedef struct _CV_ENTRY_GLOBAL_TYPES typedef struct OMFGlobalTypes
{ {
DWORD flags; DWORD flags;
DWORD cTypes; DWORD cTypes;
...@@ -1631,4 +1636,76 @@ typedef struct _CV_ENTRY_GLOBAL_TYPES ...@@ -1631,4 +1636,76 @@ typedef struct _CV_ENTRY_GLOBAL_TYPES
DWORD offset[cTypes]; DWORD offset[cTypes];
types_record[]; types_record[];
*/ */
} CV_ENTRY_GLOBAL_TYPES; } OMFGlobalTypes;
/* sstGlobalPub section */
/* Header for symbol table */
typedef struct OMFSymHash
{
unsigned short symhash;
unsigned short addrhash;
unsigned long cbSymbol;
unsigned long cbHSym;
unsigned long cbHAddr;
} OMFSymHash;
/* FIXME: to be removed (and using codeview_symbol type above)
* Symbol table entry */
typedef struct DATASYM32
{
unsigned short reclen;
unsigned short rectyp;
unsigned long typind;
unsigned long off;
unsigned short seg;
} DATASYM32;
typedef DATASYM32 PUBSYM32;
/* sstSegMap section */
typedef struct OMFSegMapDesc
{
unsigned short flags;
unsigned short ovl;
unsigned short group;
unsigned short frame;
unsigned short iSegName;
unsigned short iClassName;
unsigned long offset;
unsigned long cbSeg;
} OMFSegMapDesc;
typedef struct OMFSegMap
{
unsigned short cSeg;
unsigned short cSegLog;
/* OMFSegMapDesc rgDesc[0];*/
} OMFSegMap;
/* sstSrcModule section */
typedef struct OMFSourceLine
{
unsigned short Seg;
unsigned short cLnOff;
unsigned long offset[1];
unsigned short lineNbr[1];
} OMFSourceLine;
typedef struct OMFSourceFile
{
unsigned short cSeg;
unsigned short reserved;
unsigned long baseSrcLn[1];
unsigned short cFName;
char Name;
} OMFSourceFile;
typedef struct OMFSourceModule
{
unsigned short cFile;
unsigned short cSeg;
unsigned long baseSrcFile[1];
} OMFSourceModule;
/*
* CodeView 4 Debug format - declarations
*
* (based on cvinfo.h and cvexefmt.h from the Win32 SDK)
*
* Copyright 2000 John R. Sheets for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#define sstModule 0x120
#define sstAlignSym 0x125
#define sstSrcModule 0x127
#define sstLibraries 0x128
#define sstGlobalSym 0x129
#define sstGlobalPub 0x12a
#define sstGlobalTypes 0x12b
#define sstSegMap 0x12d
#define sstFileIndex 0x133
#define sstStaticSym 0x134
#if 0
/* Old, crusty value */
#define S_PUB32 0x0203
#endif
#define S_PUB32 0x1009
#include "pshpack1.h"
/*
* CodeView headers
*/
typedef struct OMFSignature
{
char Signature[4];
long filepos;
} OMFSignature;
typedef struct OMFDirHeader
{
unsigned short cbDirHeader;
unsigned short cbDirEntry;
unsigned long cDir;
long lfoNextDir;
unsigned long flags;
} OMFDirHeader;
typedef struct OMFDirEntry
{
unsigned short SubSection;
unsigned short iMod;
long lfo;
unsigned long cb;
} OMFDirEntry;
/*
* sstModule subsection
*/
typedef struct OMFSegDesc
{
unsigned short Seg;
unsigned short pad;
unsigned long Off;
unsigned long cbSeg;
} OMFSegDesc;
/* Must chop off the OMFSegDesc* field, because we need to write this
* struct out to a file. If we write the whole struct out, we'll end up
* with (*OMFSegDesc), not (OMFSegDesc). See OMFModuleFull.
*/
typedef struct OMFModule
{
unsigned short ovlNumber;
unsigned short iLib;
unsigned short cSeg;
char Style[2];
} OMFModule;
/* Full version, with memory pointers, too. Use OMFModule for writing out to
* a file, and OMFModuleFull for reading. If offsetof() were available, we
* could use that instead.
*/
typedef struct OMFModuleFull
{
unsigned short ovlNumber;
unsigned short iLib;
unsigned short cSeg;
char Style[2];
OMFSegDesc *SegInfo;
char *Name;
} OMFModuleFull;
/*
* sstGlobalPub section
*/
/* Header for symbol table.
*/
typedef struct OMFSymHash
{
unsigned short symhash;
unsigned short addrhash;
unsigned long cbSymbol;
unsigned long cbHSym;
unsigned long cbHAddr;
} OMFSymHash;
/* Symbol table entry.
*/
typedef struct DATASYM32
{
unsigned short reclen;
unsigned short rectyp;
unsigned long typind;
unsigned long off;
unsigned short seg;
} DATASYM32;
typedef DATASYM32 PUBSYM32;
/*
* sstSegMap section
*/
typedef struct OMFSegMapDesc
{
unsigned short flags;
unsigned short ovl;
unsigned short group;
unsigned short frame;
unsigned short iSegName;
unsigned short iClassName;
unsigned long offset;
unsigned long cbSeg;
} OMFSegMapDesc;
typedef struct OMFSegMap
{
unsigned short cSeg;
unsigned short cSegLog;
/* OMFSegMapDesc rgDesc[0];*/
} OMFSegMap;
/*
* sstSrcModule section
*/
typedef struct OMFSourceLine
{
unsigned short Seg;
unsigned short cLnOff;
unsigned long offset[1];
unsigned short lineNbr[1];
} OMFSourceLine;
typedef struct OMFSourceFile
{
unsigned short cSeg;
unsigned short reserved;
unsigned long baseSrcLn[1];
unsigned short cFName;
char Name;
} OMFSourceFile;
typedef struct OMFSourceModule
{
unsigned short cFile;
unsigned short cSeg;
unsigned long baseSrcFile[1];
} OMFSourceModule;
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
#include "winedump.h" #include "winedump.h"
#include "cvinclude.h"
#include "wine/mscvpdb.h" #include "wine/mscvpdb.h"
/* /*
...@@ -99,8 +98,8 @@ ...@@ -99,8 +98,8 @@
* (OMFDirHeader.cDir) * (OMFDirHeader.cDir)
*/ */
extern const IMAGE_NT_HEADERS* PE_nt_headers; extern const IMAGE_NT_HEADERS* PE_nt_headers;
static const void* cv_base /* = 0 */; static const void* cv_base /* = 0 */;
static int dump_cv_sst_module(const OMFDirEntry* omfde) static int dump_cv_sst_module(const OMFDirEntry* omfde)
{ {
...@@ -124,7 +123,7 @@ static int dump_cv_sst_module(const OMFDirEntry* omfde) ...@@ -124,7 +123,7 @@ static int dump_cv_sst_module(const OMFDirEntry* omfde)
for (i = 0; i < module->cSeg; i++) for (i = 0; i < module->cSeg; i++)
{ {
printf (" segment #%2d: offset = [0x%8lx], size = [0x%8lx]\n", printf (" segment #%2d: offset = [0x%8x], size = [0x%8x]\n",
segDesc->Seg, segDesc->Off, segDesc->cbSeg); segDesc->Seg, segDesc->Off, segDesc->cbSeg);
segDesc++; segDesc++;
} }
...@@ -376,8 +375,8 @@ static void dump_codeview_all_modules(const OMFDirHeader *omfdh) ...@@ -376,8 +375,8 @@ static void dump_codeview_all_modules(const OMFDirHeader *omfdh)
printf("Module #%2d (%p)\n", i + 1, &dirEntry[i]); printf("Module #%2d (%p)\n", i + 1, &dirEntry[i]);
printf(" SubSection: %04X (%s)\n", dirEntry[i].SubSection, str); printf(" SubSection: %04X (%s)\n", dirEntry[i].SubSection, str);
printf(" iMod: %d\n", dirEntry[i].iMod); printf(" iMod: %d\n", dirEntry[i].iMod);
printf(" lfo: %ld\n", dirEntry[i].lfo); printf(" lfo: %d\n", dirEntry[i].lfo);
printf(" cb: %lu\n", dirEntry[i].cb); printf(" cb: %u\n", dirEntry[i].cb);
switch (dirEntry[i].SubSection) switch (dirEntry[i].SubSection)
{ {
...@@ -402,8 +401,9 @@ static void dump_codeview_all_modules(const OMFDirHeader *omfdh) ...@@ -402,8 +401,9 @@ static void dump_codeview_all_modules(const OMFDirHeader *omfdh)
static void dump_codeview_headers(unsigned long base, unsigned long len) static void dump_codeview_headers(unsigned long base, unsigned long len)
{ {
const OMFDirHeader* dirHeader; const OMFDirHeader* dirHeader;
const OMFSignature* signature; const char* signature;
const OMFDirEntry* dirEntry; const OMFDirEntry* dirEntry;
const OMFSignature* sig;
unsigned i; unsigned i;
int modulecount = 0, alignsymcount = 0, srcmodulecount = 0, librariescount = 0; int modulecount = 0, alignsymcount = 0, srcmodulecount = 0, librariescount = 0;
int globalsymcount = 0, globalpubcount = 0, globaltypescount = 0; int globalsymcount = 0, globalpubcount = 0, globaltypescount = 0;
...@@ -415,50 +415,51 @@ static void dump_codeview_headers(unsigned long base, unsigned long len) ...@@ -415,50 +415,51 @@ static void dump_codeview_headers(unsigned long base, unsigned long len)
signature = cv_base; signature = cv_base;
printf(" CodeView Data\n"); printf(" CodeView Data\n");
printf(" Signature: %.4s\n", signature);
printf(" Signature: %.4s\n", signature->Signature); if (memcmp(signature, "NB10", 4) == 0)
printf(" Filepos: 0x%08lX\n", signature->filepos);
if (memcmp(signature->Signature, "NB10", 4) == 0)
{ {
const CODEVIEW_PDB_DATA* pdb_data; const CODEVIEW_PDB_DATA* pdb_data;
pdb_data = (const void *)(signature + 1); pdb_data = (const void *)cv_base;
printf(" TimeStamp: %08X (%s)\n", printf(" Filepos: 0x%08lX\n", pdb_data->filepos);
printf(" TimeStamp: %08X (%s)\n",
pdb_data->timestamp, get_time_str(pdb_data->timestamp)); pdb_data->timestamp, get_time_str(pdb_data->timestamp));
printf(" Dunno: %08X\n", pdb_data->unknown); printf(" Dunno: %08X\n", pdb_data->unknown);
printf(" Filename: %s\n", pdb_data->name); printf(" Filename: %s\n", pdb_data->name);
return; return;
} }
if (memcmp(signature->Signature, "RSDS", 4) == 0) if (memcmp(signature, "RSDS", 4) == 0)
{ {
const CODEVIEW_HEADER_RSDS* rsds_data; const OMFSignatureRSDS* rsds_data;
char guid_str[40]; char guid_str[40];
rsds_data = (const void *)signature; rsds_data = (const void *)cv_base;
printf(" Signature: %08X\n", printf(" Guid: %s\n",
rsds_data->dwSignature);
printf(" Guid: %s\n",
guid_to_string(&rsds_data->guid, guid_str, sizeof(guid_str))); guid_to_string(&rsds_data->guid, guid_str, sizeof(guid_str)));
printf(" Dunno: %08X\n", rsds_data->unknown); printf(" Dunno: %08X\n", rsds_data->unknown);
printf(" Filename: %s\n", rsds_data->name); printf(" Filename: %s\n", rsds_data->name);
return; return;
} }
if (memcmp(signature->Signature, "NB09", 4) != 0 && memcmp(signature->Signature, "NB11", 4) != 0) if (memcmp(signature, "NB09", 4) != 0 && memcmp(signature, "NB11", 4) != 0)
{ {
printf("Unsupported signature (%.4s), aborting\n", signature->Signature); printf("Unsupported signature (%.4s), aborting\n", signature);
return; return;
} }
dirHeader = PRD(Offset(cv_base) + signature->filepos, sizeof(OMFDirHeader)); sig = cv_base;
printf(" Filepos: 0x%08lX\n", sig->filepos);
dirHeader = PRD(Offset(cv_base) + sig->filepos, sizeof(OMFDirHeader));
if (!dirHeader) {printf("Can't get debug header, aborting\n"); return;} if (!dirHeader) {printf("Can't get debug header, aborting\n"); return;}
printf(" Size of header: 0x%4X\n", dirHeader->cbDirHeader); printf(" Size of header: 0x%4X\n", dirHeader->cbDirHeader);
printf(" Size per entry: 0x%4X\n", dirHeader->cbDirEntry); printf(" Size per entry: 0x%4X\n", dirHeader->cbDirEntry);
printf(" # of entries: 0x%8lX (%ld)\n", dirHeader->cDir, dirHeader->cDir); printf(" # of entries: 0x%8X (%d)\n", dirHeader->cDir, dirHeader->cDir);
printf(" Offset to NextDir: 0x%8lX\n", dirHeader->lfoNextDir); printf(" Offset to NextDir: 0x%8X\n", dirHeader->lfoNextDir);
printf(" Flags: 0x%8lX\n", dirHeader->flags); printf(" Flags: 0x%8X\n", dirHeader->flags);
if (!dirHeader->cDir) return; if (!dirHeader->cDir) return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment