/* * CodeView 4 Debug format - declarations * * (based on cvinfo.h and cvexefmt.h from the Win32 SDK) */ #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" /* FIXME: no idea if this is correct */ typedef struct { DWORD unknown1; DWORD SizeOfData; WORD unknown2; WORD unknown3; char Name[MAX_PATH]; } IMAGE_DEBUG_DIRECTORY_MISC; /* * 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;