BearParser
Portable Executable parsing library (from PE-bear)
Loading...
Searching...
No Matches
RelocDirWrapper.h
Go to the documentation of this file.
1#pragma once
2
4
8
10{
11public:
13 : DataDirEntryWrapper(pe, pe::DIR_BASERELOC), parsedSize(0) { wrap(); }
14
15 bool wrap();
16
17 virtual void* getPtr() { return reloc(); }
18
19 virtual bufsize_t getSize() { return parsedSize; }
20 virtual QString getName() { return "Relocation Dir."; }
21 virtual size_t getFieldsCount() { return entries.size(); }
22
23 virtual void* getFieldPtr(size_t fieldId, size_t subField) { return getSubfieldPtr(fieldId, subField ); }
24 virtual bufsize_t getFieldSize(size_t fieldId, size_t subField) { return getSubfieldSize(fieldId, subField ); }
25 virtual QString getFieldName(size_t fieldId) { return "Relocation Block"; }
26 virtual QString getFieldName(size_t fieldId, size_t subField) { return getSubfieldName(fieldId, subField ); }
27
28protected:
29 IMAGE_BASE_RELOCATION* reloc();
30
31private:
32 bufsize_t parsedSize;
33
34friend class RelocBlockWrapper;
35};
36
37
39{
40public:
41 // fields :
48 };
49
50 RelocBlockWrapper(Executable *pe, RelocDirWrapper *parentDir, size_t entryNumber)
51 : ExeNodeWrapper(pe, parentDir, entryNumber), cachedRaw(INVALID_ADDR), cachedMaxNum(0) { this->parentDir = parentDir; wrap(); }
52
53 bool wrap();
54
55 // full structure boundaries
56 virtual void* getPtr();
57 virtual bufsize_t getSize();
58 virtual QString getName() { return "Relocation Block"; }
59 virtual size_t getFieldsCount() { return FIELD_COUNTER; }
60
61 // specific field boundaries
62 virtual void* getFieldPtr(size_t fieldId, size_t subField = FIELD_NONE);
63 virtual QString getFieldName(size_t fieldId);
64 virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField);
65 virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField);
66
67 void* getEntriesPtr();
68 size_t maxEntriesNumInBlock();
69
70 IMAGE_BASE_RELOCATION* myReloc() { return (IMAGE_BASE_RELOCATION*) getPtr(); }
71
72private:
73 offset_t cachedRaw;
74 //size_t cachedSize; // TODO
75 offset_t cachedMaxNum;
76
77 RelocDirWrapper* parentDir;
78
79 size_t parsedSize;
80};
81
83{
84public:
85 // fields :
86 enum FieldID {
90 };
91
92 RelocEntryWrapper(Executable* pe, RelocBlockWrapper *parentDir, size_t entryNumber)
93 : ExeNodeWrapper(pe, parentDir, entryNumber) { this->parentDir = parentDir; }
94
95 // full structure boundaries
96 virtual void* getPtr();
97 virtual bufsize_t getSize();
98 virtual QString getName() { return "Type-Offset"; }
99 virtual size_t getFieldsCount() { return FIELD_COUNTER; }
100 virtual size_t getSubFieldsCount() { return 1; }
101
102 // specific field boundaries
103 virtual void* getFieldPtr(size_t fieldId, size_t subField = FIELD_NONE) { return getPtr(); }
104 virtual QString getFieldName(size_t fieldId) { return getName(); }
105 virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField) { return Executable::NOT_ADDR; }
106
107 offset_t deltaToRVA(WORD delta);
108 static WORD getType(WORD relocEntryVal);
109 static WORD getDelta(WORD relocEntryVal);
110 static QString translateType(WORD type);
111
112private:
113 RelocBlockWrapper* parentDir;
114};
115
uint32_t bufsize_t
const offset_t INVALID_ADDR
uint64_t offset_t
#define FIELD_NONE
virtual void * getSubfieldPtr(size_t fieldId, size_t subField)
virtual QString getSubfieldName(size_t fieldId, size_t subField)
std::vector< ExeNodeWrapper * > entries
virtual bufsize_t getSubfieldSize(size_t fieldId, size_t subField)
Definition: PEFile.h:41
virtual QString getFieldName(size_t fieldId)
virtual WrappedValue::data_type containsDataType(size_t fieldId, size_t subField)
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
RelocBlockWrapper(Executable *pe, RelocDirWrapper *parentDir, size_t entryNumber)
virtual void * getPtr()
virtual size_t getFieldsCount()
virtual QString getName()
virtual bufsize_t getSize()
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField)
IMAGE_BASE_RELOCATION * myReloc()
virtual QString getName()
virtual void * getFieldPtr(size_t fieldId, size_t subField)
virtual QString getFieldName(size_t fieldId, size_t subField)
virtual bufsize_t getSize()
virtual QString getFieldName(size_t fieldId)
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField)
RelocDirWrapper(PEFile *pe)
virtual void * getPtr()
IMAGE_BASE_RELOCATION * reloc()
virtual size_t getFieldsCount()
offset_t deltaToRVA(WORD delta)
virtual size_t getSubFieldsCount()
static QString translateType(WORD type)
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField)
virtual size_t getFieldsCount()
FieldID
@ FIELD_COUNTER
@ RELOC_ENTRY_VAL
@ NONE
virtual void * getPtr()
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
virtual bufsize_t getSize()
static WORD getDelta(WORD relocEntryVal)
RelocEntryWrapper(Executable *pe, RelocBlockWrapper *parentDir, size_t entryNumber)
virtual QString getName()
virtual QString getFieldName(size_t fieldId)
static WORD getType(WORD relocEntryVal)