CV8 structures (for x86 and AMD64) - used by MSVC 8 (2005) Everything listed in the order MASM seems to output it in. .debug$S: symbol and line number information 4 bytes - version (4) Each major portion of DEBUG$S starts with 4 byte type, 4 byte length (in bytes following the length field). Each set is 4-byte aligned with 0s at the end (not included in length). 0x000000F3: source filename string table 1 byte - 0 (0th filename) 0-terminated filename strings, 1 for each source file 0x000000F4: source file info for each source file: 4 bytes - offset of filename in source filename string table {2 bytes - checksum type/length? (0x0110) 16 bytes - MD5 checksum of source file} OR {2 bytes - no checksum (0)} 2 bytes - 0 (padding?) 0x000000F2: line numbers for section 4 bytes - start offset in section (SECREL to section start) 2 bytes - section index (SECTION to section start) 2 bytes - pad/align (0) 4 bytes - section length covered by line number info followed by one or more source mappings: 4 bytes - offset of source file in source file info table 4 bytes - number of line number pairs 4 bytes - number of bytes this mapping takes, i.e. 12 + pair-count * 8. followed by pairs of: 4 bytes - offset in section 4 bytes - line number; if high bit is set, end of statement/breakpointable (?) - e.g. lines containing just labels should have line numbers 0x000000F1: symbol information enclosed data per below (each element starts with 2 byte length, 2 byte type) basically slightly updated versions of CV5 symbol info with 0-terminated rather than length-prefixed strings 0x1101 : Name of object file 4 byte signature (0 for asm) 0-terminated object filename 0x1116 : creator signature (compile flag) 4 bytes - language (3=Masm) 4 bytes - target processor (0xD0 = AMD64) 4 bytes - flags 4 bytes - version 2 bytes - ? 0-terminated string containing creator name pairs of 0-terminated strings - keys/values from CL: cwd - current working directory cl - full path of compiler executable cmd - full args (one long string, double-quoted args if needed) src - relative path to source (from cwd) pdb - full path to pdb file ML doesn't output any pairs pairs list terminated with two empty strings 0x1105 : Code Label 16:32/64 4 bytes SECREL of symbol 2 bytes SECTION of symbol 1 byte - flags 0-terminated string containing symbol name 0x110C : local data 16:32/64 4 bytes type index of symbol 4 bytes SECREL of symbol 2 bytes SECTION of symbol 0-terminated string containing symbol name 0x110D : global data 16:32/64 4 bytes type index of symbol 4 bytes SECREL of symbol 2 bytes SECTION of symbol 0-terminated string containing symbol name 0x1110 : local/global (?) procedure start 16:32/64 4 bytes - parent 4 bytes - pend 4 bytes - pnext 4 bytes - procedure length (bytes) 4 bytes - debug start (offset from procedure start to frame setup) 4 bytes - debug end (offset from procedure start to frame cleanup) 4 bytes - type index of procedure type 4 bytes - offset of procedure (SECREL of symbol) 2 bytes - segment of procedure (SECTION of symbol) 1 byte - flags 0-terminated string containing procedure name .debug$T: type information 4 bytes - version (4) followed by type information per CV5 spec, padded to 4-byte boundaries