BearParser
Portable Executable parsing library (from PE-bear)
DebugDirWrapper.cpp
Go to the documentation of this file.
2
3/*
4typedef struct _IMAGE_DEBUG_DIRECTORY {
5 DWORD Characteristics;
6 DWORD TimeDateStamp;
7 WORD MajorVersion;
8 WORD MinorVersion;
9 DWORD Type;
10 DWORD SizeOfData;
11 DWORD AddressOfRawData;
12 DWORD PointerToRawData;
13} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
14
15*/
16
17IMAGE_DEBUG_DIRECTORY* DebugDirWrapper::debugDir()
18{
20
21 BYTE *ptr = m_Exe->getContentAt(rva, Executable::RVA, sizeof(IMAGE_DEBUG_DIRECTORY));
22 if (ptr == NULL) return NULL;
23
24 return (IMAGE_DEBUG_DIRECTORY*) ptr;
25}
26
28{
29 return true;
30}
31
33{
34 return debugDir();
35}
36
38{
39 if (getPtr() == NULL) return 0;
40 return sizeof(IMAGE_DEBUG_DIRECTORY);
41}
42
44{
45 return "Debug";
46}
47
48
49void* DebugDirWrapper::getFieldPtr(size_t fId, size_t subField)
50{
51 IMAGE_DEBUG_DIRECTORY* d = debugDir();
52 if (d == NULL) return NULL;
53
54 switch (fId) {
55 case CHARACTERISTIC: return &d->Characteristics;
56 case TIMESTAMP: return &d->TimeDateStamp;
57 case MAJOR_VER: return &d->MajorVersion;
58 case MINOR_VER: return &d->MinorVersion;
59 case TYPE: return &d->Type;
60 case DATA_SIZE: return &d->SizeOfData;
61 case RAW_DATA_ADDR: return &d->AddressOfRawData;
62 case RAW_DATA_PTR: return &d->PointerToRawData;
63 }
64 return this->getPtr();
65}
66
67QString DebugDirWrapper::getFieldName(size_t fieldId)
68{
69 switch (fieldId) {
70 case CHARACTERISTIC: return "Characteristics";
71 case TIMESTAMP: return "TimeDateStamp";
72 case MAJOR_VER: return "MajorVersion";
73 case MINOR_VER: return "MinorVersion";
74 case TYPE: return "Type";
75 case DATA_SIZE: return "SizeOfData";
76 case RAW_DATA_ADDR: return "AddressOfRawData";
77 case RAW_DATA_PTR: return "PointerToRawData";
78 }
79 return getName();
80}
81
83{
84 switch (fieldId) {
85 case RAW_DATA_ADDR: return Executable::RVA;
86 case RAW_DATA_PTR: return Executable::RAW;
87 }
89}
90
92{
93 switch (type) {
94 case pe::DT_UNKNOWN : return "unknown";
95 case pe::DT_COFF : return "COFF";
96 case pe::DT_CODEVIEW : return "Visual C++ (CodeView)";
97 case pe::DT_FPO : return "frame pointer omission";
98 case pe::DT_MISC : return "DBG file";
99 case pe::DT_EXCEPTION : return "A copy of .pdata section";
100 case pe::DT_FIXUP : return "Reserved";
101 case pe::DT_OMAP_TO_SRC : return "mapping from an RVA in image to an RVA in source image";
102 case pe::DT_OMAP_FROM_SRC : return "mapping from an RVA in source image to an RVA in image";
103 case pe::DT_BORLAND : return "Borland";
104 case pe::DT_RESERVED10 : return "Reserved";
105 case pe::DT_CLSID : return "CLSID";
106 case pe::DT_VC_FEATURE : return "VC Feature";
107 case pe::DT_POGO : return "POGO";
108 case pe::DT_ILTCG : return "ILTCG";
109 case pe::DT_MPX : return "MPX";
110 case pe::DT_REPRO : return "REPRO";
111 }
112 return "";
113}
114
116{
117 if (fieldId != TYPE) return "";
118
119 IMAGE_DEBUG_DIRECTORY* d = debugDir();
120 if (d == NULL) return NULL;
121
122 return translateType(d->Type);
123}
124
uint32_t bufsize_t
uint64_t offset_t
offset_t getDirEntryAddress()
QString translateFieldContent(size_t fieldId)
QString translateType(int type)
virtual bufsize_t getSize()
virtual QString getName()
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
virtual QString getFieldName(size_t fieldId)
virtual void * getFieldPtr(size_t fieldId, size_t subField)
virtual void * getPtr()
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)
Definition: Executable.h:57