retdec
pdb_utils.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_PDBPARSER_PDB_UTILS_H
8 #define RETDEC_PDBPARSER_PDB_UTILS_H
9 
10 #include <map>
11 #include <string>
12 #include <vector>
13 
14 namespace retdec {
15 namespace pdbparser {
16 
17 // =================================================================
18 // VISUAL C++ TYPES AND SCRUCTURES
19 // =================================================================
20 
21 typedef unsigned int PDB_DWORD;
23 typedef char * PDB_DWORD_PTR;
24 typedef int PDB_LONG;
25 typedef PDB_LONG * PDB_PLONG;
26 typedef unsigned int PDB_ULONG;
28 typedef char * PDB_ULONG_PTR;
29 typedef char PDB_CHAR;
30 typedef PDB_CHAR * PDB_PCHAR;
31 typedef unsigned char PDB_UCHAR;
33 typedef unsigned char PDB_BYTE;
34 typedef PDB_BYTE * PDB_PBYTE;
35 typedef unsigned short PDB_WORD;
36 typedef PDB_WORD * PDB_PWORD;
37 typedef short PDB_SHORT;
39 typedef unsigned short PDB_USHORT;
42 typedef void PDB_VOID;
43 typedef void * PDB_PVOID;
44 typedef size_t PDB_SIZE_T;
45 
46 #define TRUE true
47 #define FALSE false
48 
49 #define CHAR_ sizeof(PDB_CHAR)
50 #define WORD_ sizeof(PDB_WORD)
51 #define SHORT_ sizeof(PDB_SHORT)
52 #define USHORT_ sizeof(PDB_USHORT)
53 #define LONG_ sizeof(PDB_LONG)
54 #define ULONG_ sizeof(PDB_ULONG)
55 #define DWORD_ sizeof(PDB_DWORD)
56 
57 typedef struct PDB__GUID
58 {
59  unsigned long Data1;
60  unsigned short Data2;
61  unsigned short Data3;
62  unsigned char Data4[8];
64 
65 #define IMAGE_SIZEOF_SHORT_NAME 8
66 
68 {
70  union
71  {
74  } Misc;
84 
85 #ifndef MAX_PATH
86 #define MAX_PATH 260
87 #endif
88 
89 // =================================================================
90 // PDB PARSER TYPES AND STRUCTURES
91 // =================================================================
92 
93 // PDB Stream
94 typedef struct _PDBStream
95 {
96  char * data; // stream data pointer
97  int size; // stream size in bytes
98  bool unused; // indicates unused stream
99  bool linear; // stream is linear in PDB file
101 
102 // PDB Modules vector
103 typedef std::vector<PDBStream> PDBStreamsVec;
104 
105 // PDB Module
106 typedef struct _PDBModule
107 {
108  const char * name; // module name
109  int stream_num; // number of stream with module symbols
110  PDBStream * stream; // stream with module symbols
112 
113 // PDB Modules vector
114 typedef std::vector<PDBModule> PDBModulesVec;
115 
116 // PDB PE Section
117 typedef struct _PDBPESection
118 {
119  const char * name; // section name
120  uint64_t virtual_address; // virtual address
121  uint64_t file_address; // address in file
123 
124 // PDB PE sections vector
125 typedef std::vector<PDBPESection> PDBSectionsVec;
126 
127 // General PDB symbol structure
128 typedef struct _PDBGeneralSymbol
129 {
130  PDB_WORD size; // symbol data size
131  PDB_WORD type; // symbol type
132  PDB_BYTE data[]; // symbol data
134 
135 // Big PDB symbol structure
136 typedef struct _PDBBigSymbol
137 {
138  PDB_DWORD type; // symbol type
139  PDB_DWORD size; // symbol data size
140  PDB_BYTE data[]; // symbol data
142 
143 // =================================================================
144 // UTILITY FUNCTIONS
145 // =================================================================
146 
147 PDB_PBYTE RecordValue(PDB_PBYTE pbData, PDB_PDWORD pdValue); // Get numeric value followed by string from PDB record
148 void print_dwords(PDB_DWORD *data, int len); // Print list of dwords (hexadecomally)
149 void print_bytes(PDB_BYTE *data, int len); // Print list of bytes (hexadecomally)
150 
151 } // namespace pdbparser
152 } // namespace retdec
153 
154 #endif
PDB_DWORD * PDB_PDWORD
Definition: pdb_utils.h:22
unsigned short PDB_USHORT
Definition: pdb_utils.h:39
size_t PDB_SIZE_T
Definition: pdb_utils.h:44
std::vector< PDBModule > PDBModulesVec
Definition: pdb_utils.h:114
std::vector< PDBStream > PDBStreamsVec
Definition: pdb_utils.h:103
PDB_USHORT * PDB_PUSHORT
Definition: pdb_utils.h:40
PDB_CHAR * PDB_PCHAR
Definition: pdb_utils.h:30
unsigned char PDB_BYTE
Definition: pdb_utils.h:33
char * PDB_ULONG_PTR
Definition: pdb_utils.h:28
struct retdec::pdbparser::PDB__IMAGE_SECTION_HEADER PDB_IMAGE_SECTION_HEADER
void print_dwords(PDB_DWORD *data, int len)
Definition: pdb_utils.cpp:78
struct retdec::pdbparser::PDB__IMAGE_SECTION_HEADER * PDB_PIMAGE_SECTION_HEADER
char PDB_CHAR
Definition: pdb_utils.h:29
PDB_BYTE * PDB_PBYTE
Definition: pdb_utils.h:34
void * PDB_PVOID
Definition: pdb_utils.h:43
unsigned short PDB_WORD
Definition: pdb_utils.h:35
struct retdec::pdbparser::_PDBModule PDBModule
struct retdec::pdbparser::_PDBStream PDBStream
PDB_LONG * PDB_PLONG
Definition: pdb_utils.h:25
PDB_WORD * PDB_PWORD
Definition: pdb_utils.h:36
unsigned int PDB_DWORD
Definition: pdb_utils.h:21
char * PDB_DWORD_PTR
Definition: pdb_utils.h:23
struct retdec::pdbparser::_PDBBigSymbol PDBBigSymbol
struct retdec::pdbparser::PDB__GUID PDB_GUID
unsigned char PDB_UCHAR
Definition: pdb_utils.h:31
void print_bytes(PDB_BYTE *data, int len)
Definition: pdb_utils.cpp:87
std::vector< PDBPESection > PDBSectionsVec
Definition: pdb_utils.h:125
PDB_SHORT * PDB_PSHORT
Definition: pdb_utils.h:38
PDB_UCHAR * PDB_PUCHAR
Definition: pdb_utils.h:32
unsigned int PDB_ULONG
Definition: pdb_utils.h:26
int PDB_LONG
Definition: pdb_utils.h:24
struct retdec::pdbparser::_PDBGeneralSymbol PDBGeneralSymbol
void PDB_VOID
Definition: pdb_utils.h:42
short PDB_SHORT
Definition: pdb_utils.h:37
struct retdec::pdbparser::_PDBPESection PDBPESection
PDB_BYTE PDB_BOOLEAN
Definition: pdb_utils.h:41
PDB_PBYTE RecordValue(PDB_PBYTE pbData, PDB_PDWORD pdValue)
Definition: pdb_utils.cpp:16
PDB_ULONG * PDB_PULONG
Definition: pdb_utils.h:27
Definition: archive_wrapper.h:19
#define IMAGE_SIZEOF_SHORT_NAME
Definition: pdb_utils.h:65
Definition: pdb_utils.h:58
unsigned short Data3
Definition: pdb_utils.h:61
unsigned long Data1
Definition: pdb_utils.h:59
unsigned char Data4[8]
Definition: pdb_utils.h:62
unsigned short Data2
Definition: pdb_utils.h:60
PDB_DWORD PhysicalAddress
Definition: pdb_utils.h:72
PDB_DWORD PointerToRawData
Definition: pdb_utils.h:77
PDB_WORD NumberOfRelocations
Definition: pdb_utils.h:80
union retdec::pdbparser::PDB__IMAGE_SECTION_HEADER::@33 Misc
PDB_BYTE Name[IMAGE_SIZEOF_SHORT_NAME]
Definition: pdb_utils.h:69
PDB_DWORD PointerToRelocations
Definition: pdb_utils.h:78
PDB_DWORD VirtualAddress
Definition: pdb_utils.h:75
PDB_DWORD VirtualSize
Definition: pdb_utils.h:73
PDB_DWORD PointerToLinenumbers
Definition: pdb_utils.h:79
PDB_WORD NumberOfLinenumbers
Definition: pdb_utils.h:81
PDB_DWORD Characteristics
Definition: pdb_utils.h:82
PDB_DWORD SizeOfRawData
Definition: pdb_utils.h:76
Definition: pdb_utils.h:137
PDB_BYTE data[]
Definition: pdb_utils.h:140
PDB_DWORD type
Definition: pdb_utils.h:138
PDB_DWORD size
Definition: pdb_utils.h:139
Definition: pdb_utils.h:129
PDB_WORD size
Definition: pdb_utils.h:130
PDB_BYTE data[]
Definition: pdb_utils.h:132
PDB_WORD type
Definition: pdb_utils.h:131
Definition: pdb_utils.h:107
PDBStream * stream
Definition: pdb_utils.h:110
const char * name
Definition: pdb_utils.h:108
int stream_num
Definition: pdb_utils.h:109
Definition: pdb_utils.h:118
const char * name
Definition: pdb_utils.h:119
uint64_t file_address
Definition: pdb_utils.h:121
uint64_t virtual_address
Definition: pdb_utils.h:120
Definition: pdb_utils.h:95
int size
Definition: pdb_utils.h:97
bool linear
Definition: pdb_utils.h:99
char * data
Definition: pdb_utils.h:96
bool unused
Definition: pdb_utils.h:98