BearParser
Portable Executable parsing library (from PE-bear)
Toggle main menu visibility
Loading...
Searching...
No Matches
parser
include
bearparser
pe
ImportDirWrapper.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
ImportBaseDirWrapper.h
"
4
#include "pe_formats.h"
5
6
/*
7
typedef struct _IMAGE_THUNK_DATA32 {
8
union {
9
DWORD ForwarderString; // PBYTE
10
DWORD Function; // PDWORD
11
DWORD Ordinal;
12
DWORD AddressOfData; // PIMAGE_IMPORT_BY_NAME
13
} u1;
14
} IMAGE_THUNK_DATA32;
15
16
typedef struct _IMAGE_THUNK_DATA64 {
17
union {
18
ULONGLONG ForwarderString; // PBYTE
19
ULONGLONG Function; // PDWORD
20
ULONGLONG Ordinal;
21
ULONGLONG AddressOfData; //PIMAGE_IMPORT_BY_NAME
22
} u1;
23
} IMAGE_THUNK_DATA64;
24
*/
25
26
class
ImportDirWrapper
;
27
class
ImportEntryWrapper
;
28
class
ImportedFuncWrapper
;
29
30
class
ImportDirWrapper
:
public
ImportBaseDirWrapper
31
{
32
public
:
33
ImportDirWrapper
(
PEFile
*pe)
34
:
ImportBaseDirWrapper
(pe, pe::DIR_IMPORT) {
wrap
(); }
35
36
virtual
void
*
getPtr
() {
return
firstDescriptor
(); }
37
virtual
bufsize_t
getSize
();
38
virtual
QString
getName
() {
return
"Imports"
; }
39
40
protected
:
41
virtual
bool
loadNextEntry
(
size_t
cntr);
42
43
IMAGE_DATA_DIRECTORY*
getDataDirectory
();
44
IMAGE_IMPORT_DESCRIPTOR *
firstDescriptor
();
45
46
friend
class
ImportEntryWrapper
;
47
};
48
49
50
class
ImportEntryWrapper
:
public
ImportBaseEntryWrapper
51
{
52
public
:
53
/* fields :*/
54
enum
FieldID
{
55
NONE
=
FIELD_NONE
,
56
ORIG_FIRST_THUNK
,
57
TIMESTAMP
,
58
FORWARDER
,
59
NAME
,
60
FIRST_THUNK
,
61
FIELD_COUNTER
62
};
63
64
ImportEntryWrapper
(
PEFile
*pe,
ImportDirWrapper
*importsDir,
size_t
entryNumber)
65
:
ImportBaseEntryWrapper
(pe, importsDir, entryNumber) {
wrap
(); }
66
67
//virtual bool wrap();
68
//bool isValid();
69
70
/* full structure boundaries */
71
virtual
void
*
getPtr
();
72
73
virtual
bufsize_t
getSize
();
74
bool
isBound
();
75
virtual
QString
getName
();
76
virtual
size_t
getFieldsCount
() {
return
FIELD_COUNTER
; }
77
78
/* specific field boundaries */
79
virtual
void
*
getFieldPtr
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
80
virtual
QString
getFieldName
(
size_t
fieldId);
81
virtual
Executable::addr_type
containsAddrType
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
82
83
bufsize_t
geEntrySize
()
84
{
85
if
(
m_Exe
== NULL)
return
0;
86
return
ImportBaseDirWrapper::thunkSize
(
m_Exe
->getBitMode());
87
}
88
89
virtual
offset_t
getNextEntryOffset
()
90
{
91
offset_t
nextOffset =
INVALID_ADDR
;
92
//get after existing entries:
93
if
(this->
getEntriesCount
() > 0) {
94
return
ExeNodeWrapper::getNextEntryOffset
();
95
}
96
//get by thunk:
97
IMAGE_IMPORT_DESCRIPTOR* desc = (IMAGE_IMPORT_DESCRIPTOR*) this->
getPtr
();
98
if
(!desc)
return
INVALID_ADDR
;
99
100
offset_t
firstThunk = desc->FirstThunk;
101
if
(firstThunk == 0) {
102
firstThunk = desc->OriginalFirstThunk;
103
}
104
nextOffset =
m_Exe
->convertAddr(desc->FirstThunk,
Executable::RVA
,
Executable::RAW
);
105
return
nextOffset;
106
}
107
108
char
*
getLibraryName
();
109
110
protected
:
111
bool
loadNextEntry
(
size_t
entryNum
);
112
113
friend
class
ImportDirWrapper
;
114
};
115
116
class
ImportedFuncWrapper
:
public
ImportBaseFuncWrapper
117
{
118
public
:
119
/* fields :*/
120
enum
FieldID
{
121
NONE
=
FIELD_NONE
,
122
ORIG_THUNK
,
123
THUNK
,
124
FORWARDER
,
125
HINT
,
126
FIELD_COUNTER
127
};
128
129
ImportedFuncWrapper
(
PEFile
*pe,
ImportEntryWrapper
* parentLib,
size_t
entryNumber)
130
:
ImportBaseFuncWrapper
(pe, parentLib, entryNumber) {}
// this->parentLib = parentLib; }
131
132
/* full structure boundaries */
133
virtual
void
*
getPtr
();
134
virtual
IMAGE_IMPORT_BY_NAME*
getImportByNamePtr
();
135
136
virtual
bufsize_t
getSize
();
137
//virtual QString getName();
138
virtual
size_t
getFieldsCount
() {
return
FIELD_COUNTER
; }
139
virtual
size_t
getSubFieldsCount
() {
return
1; }
140
141
/* specific field boundaries */
142
virtual
void
*
getFieldPtr
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
143
virtual
bufsize_t
getFieldSize
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
144
virtual
QString
getFieldName
(
size_t
fieldId);
145
virtual
Executable::addr_type
containsAddrType
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
146
147
uint64_t
getThunkValue
();
148
149
offset_t
getFieldRVA
(
ImportEntryWrapper::FieldID
fId);
150
void
*
getValuePtr
(
ImportEntryWrapper::FieldID
fId);
151
152
virtual
offset_t
callVia
() {
return
getFieldRVA
(
ImportEntryWrapper::FIRST_THUNK
); }
153
bool
isByOrdinal
();
154
virtual
uint64_t
getOrdinal
() {
return
getThunkValue
(); }
155
char
*
getFunctionName
();
156
157
friend
class
ImportDirWrapper
;
158
};
159
INVALID_ADDR
const offset_t INVALID_ADDR
Definition
AbstractByteBuffer.h:21
offset_t
uint64_t offset_t
Definition
AbstractByteBuffer.h:20
bufsize_t
size_t bufsize_t
Definition
AbstractByteBuffer.h:17
FIELD_NONE
#define FIELD_NONE
Definition
ExeElementWrapper.h:9
ImportBaseDirWrapper.h
DataDirEntryWrapper::PEFile
friend class PEFile
Definition
DataDirEntryWrapper.h:22
ExeElementWrapper::m_Exe
Executable * m_Exe
Definition
ExeElementWrapper.h:65
ExeNodeWrapper::getNextEntryOffset
virtual offset_t getNextEntryOffset()
Definition
ExeNodeWrapper.cpp:92
ExeNodeWrapper::getEntriesCount
virtual size_t getEntriesCount()
Definition
ExeNodeWrapper.h:20
ExeNodeWrapper::entryNum
size_t entryNum
Definition
ExeNodeWrapper.h:54
Executable::addr_type
addr_type
Definition
Executable.h:42
Executable::RVA
@ RVA
Definition
Executable.h:45
Executable::RAW
@ RAW
Definition
Executable.h:44
ImportBaseDirWrapper::thunkSize
static bufsize_t thunkSize(Executable::exe_bits bits)
Definition
ImportBaseDirWrapper.cpp:23
ImportBaseDirWrapper::wrap
virtual bool wrap()
Definition
ImportBaseDirWrapper.cpp:114
ImportBaseDirWrapper::ImportBaseDirWrapper
ImportBaseDirWrapper(PEFile *pe, pe::dir_entry v_entryType)
Definition
ImportBaseDirWrapper.h:45
ImportBaseEntryWrapper::wrap
bool wrap()
Definition
ImportBaseDirWrapper.cpp:168
ImportBaseEntryWrapper::ImportBaseEntryWrapper
ImportBaseEntryWrapper(PEFile *pe, ImportBaseDirWrapper *importsDir, size_t entryNumber)
Definition
ImportBaseDirWrapper.h:77
ImportBaseFuncWrapper::ImportBaseFuncWrapper
ImportBaseFuncWrapper(PEFile *pe, ImportBaseEntryWrapper *parentLib, size_t entryNumber)
Definition
ImportBaseDirWrapper.h:96
ImportDirWrapper
Definition
ImportDirWrapper.h:31
ImportDirWrapper::ImportDirWrapper
ImportDirWrapper(PEFile *pe)
Definition
ImportDirWrapper.h:33
ImportDirWrapper::getDataDirectory
IMAGE_DATA_DIRECTORY * getDataDirectory()
Definition
ImportDirWrapper.cpp:304
ImportDirWrapper::getPtr
virtual void * getPtr()
Definition
ImportDirWrapper.h:36
ImportDirWrapper::getName
virtual QString getName()
Definition
ImportDirWrapper.h:38
ImportDirWrapper::getSize
virtual bufsize_t getSize()
Definition
ImportDirWrapper.cpp:355
ImportDirWrapper::loadNextEntry
virtual bool loadNextEntry(size_t cntr)
Definition
ImportDirWrapper.cpp:329
ImportDirWrapper::firstDescriptor
IMAGE_IMPORT_DESCRIPTOR * firstDescriptor()
Definition
ImportDirWrapper.cpp:313
ImportDirWrapper::ImportEntryWrapper
friend class ImportEntryWrapper
Definition
ImportDirWrapper.h:46
ImportEntryWrapper
Definition
ImportDirWrapper.h:51
ImportEntryWrapper::isBound
bool isBound()
Definition
ImportDirWrapper.cpp:225
ImportEntryWrapper::FieldID
FieldID
Definition
ImportDirWrapper.h:54
ImportEntryWrapper::FIRST_THUNK
@ FIRST_THUNK
Definition
ImportDirWrapper.h:60
ImportEntryWrapper::FORWARDER
@ FORWARDER
Definition
ImportDirWrapper.h:58
ImportEntryWrapper::ORIG_FIRST_THUNK
@ ORIG_FIRST_THUNK
Definition
ImportDirWrapper.h:56
ImportEntryWrapper::NONE
@ NONE
Definition
ImportDirWrapper.h:55
ImportEntryWrapper::NAME
@ NAME
Definition
ImportDirWrapper.h:59
ImportEntryWrapper::TIMESTAMP
@ TIMESTAMP
Definition
ImportDirWrapper.h:57
ImportEntryWrapper::FIELD_COUNTER
@ FIELD_COUNTER
Definition
ImportDirWrapper.h:61
ImportEntryWrapper::getName
virtual QString getName()
Definition
ImportDirWrapper.cpp:218
ImportEntryWrapper::geEntrySize
bufsize_t geEntrySize()
Definition
ImportDirWrapper.h:83
ImportEntryWrapper::getLibraryName
char * getLibraryName()
Definition
ImportDirWrapper.cpp:274
ImportEntryWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
ImportDirWrapper.cpp:251
ImportEntryWrapper::ImportEntryWrapper
ImportEntryWrapper(PEFile *pe, ImportDirWrapper *importsDir, size_t entryNumber)
Definition
ImportDirWrapper.h:64
ImportEntryWrapper::loadNextEntry
bool loadNextEntry(size_t entryNum)
Definition
ImportDirWrapper.cpp:173
ImportEntryWrapper::getFieldsCount
virtual size_t getFieldsCount()
Definition
ImportDirWrapper.h:76
ImportEntryWrapper::getPtr
virtual void * getPtr()
Definition
ImportDirWrapper.cpp:190
ImportEntryWrapper::containsAddrType
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ImportDirWrapper.cpp:263
ImportEntryWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ImportDirWrapper.cpp:235
ImportEntryWrapper::ImportDirWrapper
friend class ImportDirWrapper
Definition
ImportDirWrapper.h:113
ImportEntryWrapper::getNextEntryOffset
virtual offset_t getNextEntryOffset()
Definition
ImportDirWrapper.h:89
ImportEntryWrapper::getSize
virtual bufsize_t getSize()
Definition
ImportDirWrapper.cpp:213
ImportedFuncWrapper
Definition
ImportDirWrapper.h:117
ImportedFuncWrapper::getOrdinal
virtual uint64_t getOrdinal()
Definition
ImportDirWrapper.h:154
ImportedFuncWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ImportDirWrapper.cpp:121
ImportedFuncWrapper::ImportedFuncWrapper
ImportedFuncWrapper(PEFile *pe, ImportEntryWrapper *parentLib, size_t entryNumber)
Definition
ImportDirWrapper.h:129
ImportedFuncWrapper::getPtr
virtual void * getPtr()
Definition
ImportDirWrapper.cpp:6
ImportedFuncWrapper::FieldID
FieldID
Definition
ImportDirWrapper.h:120
ImportedFuncWrapper::NONE
@ NONE
Definition
ImportDirWrapper.h:121
ImportedFuncWrapper::FORWARDER
@ FORWARDER
Definition
ImportDirWrapper.h:124
ImportedFuncWrapper::HINT
@ HINT
Definition
ImportDirWrapper.h:125
ImportedFuncWrapper::ORIG_THUNK
@ ORIG_THUNK
Definition
ImportDirWrapper.h:122
ImportedFuncWrapper::THUNK
@ THUNK
Definition
ImportDirWrapper.h:123
ImportedFuncWrapper::FIELD_COUNTER
@ FIELD_COUNTER
Definition
ImportDirWrapper.h:126
ImportedFuncWrapper::getSize
virtual bufsize_t getSize()
Definition
ImportDirWrapper.cpp:116
ImportedFuncWrapper::containsAddrType
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ImportDirWrapper.cpp:158
ImportedFuncWrapper::getFieldsCount
virtual size_t getFieldsCount()
Definition
ImportDirWrapper.h:138
ImportedFuncWrapper::isByOrdinal
bool isByOrdinal()
Definition
ImportDirWrapper.cpp:88
ImportedFuncWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
ImportDirWrapper.cpp:147
ImportedFuncWrapper::getFunctionName
char * getFunctionName()
Definition
ImportDirWrapper.cpp:106
ImportedFuncWrapper::ImportDirWrapper
friend class ImportDirWrapper
Definition
ImportDirWrapper.h:157
ImportedFuncWrapper::getValuePtr
void * getValuePtr(ImportEntryWrapper::FieldID fId)
Definition
ImportDirWrapper.cpp:44
ImportedFuncWrapper::getFieldRVA
offset_t getFieldRVA(ImportEntryWrapper::FieldID fId)
Definition
ImportDirWrapper.cpp:25
ImportedFuncWrapper::callVia
virtual offset_t callVia()
Definition
ImportDirWrapper.h:152
ImportedFuncWrapper::getThunkValue
uint64_t getThunkValue()
Definition
ImportDirWrapper.cpp:66
ImportedFuncWrapper::getImportByNamePtr
virtual IMAGE_IMPORT_BY_NAME * getImportByNamePtr()
Definition
ImportDirWrapper.cpp:13
ImportedFuncWrapper::getSubFieldsCount
virtual size_t getSubFieldsCount()
Definition
ImportDirWrapper.h:139
ImportedFuncWrapper::getFieldSize
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ImportDirWrapper.cpp:140
PENodeWrapper::PEFile
friend class PEFile
Definition
PENodeWrapper.h:39
Generated by
1.17.0