BearParser
Portable Executable parsing library (from PE-bear)
Toggle main menu visibility
Loading...
Searching...
No Matches
parser
include
bearparser
pe
ResourceDirWrapper.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
DataDirEntryWrapper.h
"
4
#include "
ResourceLeafWrapper.h
"
5
6
#include "
rsrc/ResourcesAlbum.h
"
7
#include "
rsrc/ResourceContentFactory.h
"
8
9
#include <map>
10
#include <vector>
11
12
13
class
ResourceDirWrapper
:
public
DataDirEntryWrapper
14
{
15
public
:
16
17
enum
ResourceDirFID
{
18
NONE
=
FIELD_NONE
,
19
CHARACTERISTIC
,
20
TIMESTAMP
,
21
MAJOR_VER
,
22
MINOR_VER
,
23
NAMED_ENTRIES_NUM
,
24
ID_ENTRIES_NUM
,
25
FIELD_COUNTER
26
};
27
28
ResourceDirWrapper
(
PEFile
* pe,
ResourcesAlbum
*resAlbum = NULL,
offset_t
rawOffset = 0,
long
depth = 0,
long
topEntryId =
TOP_ENTRY_ROOT
)
29
:
DataDirEntryWrapper
(pe, pe::DIR_RESOURCE),
30
rawOff(rawOffset), dirDepth(depth), album(resAlbum), topEntryID(topEntryId)
31
{
32
wrap
();
33
}
34
35
bool
wrap
();
36
37
virtual
void
*
getPtr
() {
return
resourceDir(); }
38
virtual
bufsize_t
getSize
();
39
40
virtual
QString
getName
() {
return
"Resources"
; }
41
virtual
size_t
getFieldsCount
() {
return
FIELD_COUNTER
; }
42
virtual
size_t
getSubFieldsCount
() {
return
1; }
43
44
virtual
void
*
getFieldPtr
(
size_t
fieldId,
size_t
subField);
45
virtual
bufsize_t
getFieldSize
(
size_t
fieldId,
size_t
subField);
46
virtual
QString
getFieldName
(
size_t
fieldId);
47
48
bufsize_t
getEntriesAreaSize
()
49
{
50
return
static_cast<
bufsize_t
>
(this->
getEntriesCount
()) *
sizeof
(IMAGE_RESOURCE_DIRECTORY_ENTRY);
51
}
52
53
long
getDepth
() {
return
this->dirDepth; }
54
55
IMAGE_RESOURCE_DIRECTORY*
mainResourceDir
();
56
ResourcesAlbum
*
getAlbumPtr
() {
return
album; }
57
58
private
:
59
IMAGE_RESOURCE_DIRECTORY* resourceDir();
60
offset_t
rawOff;
61
long
dirDepth;
62
ResourcesAlbum
*album;
63
long
topEntryID;
64
};
65
66
class
ResourceEntryWrapper
:
public
PENodeWrapper
67
{
68
public
:
69
// fields :
70
enum
FieldID
{
71
NONE
=
FIELD_NONE
,
72
NAME_ID_ADDR
,
73
OFFSET_TO_DATA
,
74
FIELD_COUNTER
75
};
76
77
static
QString
translateType
(WORD
id
);
78
79
ResourceEntryWrapper
(
PEFile
*pe,
ResourceDirWrapper
*parentDir,
size_t
entryNumber,
long
topEntryId,
ResourcesAlbum
*resAlbum)
80
:
PENodeWrapper
(pe, parentDir, entryNumber), topEntryID(topEntryId), album(resAlbum), childDir(NULL), childLeaf(NULL)
81
{
82
this->parentDir = parentDir;
83
wrap
();
84
}
85
86
virtual
~ResourceEntryWrapper
() {
clear
(); }
87
88
bool
wrap
();
89
// full structure boundaries
90
virtual
void
*
getPtr
() {
return
getEntryPtr
(); }
91
virtual
bufsize_t
getSize
() {
return
sizeof
(IMAGE_RESOURCE_DIRECTORY_ENTRY); }
92
93
virtual
QString
getName
() {
return
"Resource entry: "
+
translateType
(
getID
());}
94
virtual
size_t
getFieldsCount
() {
return
FIELD_COUNTER
; }
95
virtual
size_t
getSubFieldsCount
() {
return
1; }
96
97
// specific field boundaries
98
virtual
void
*
getFieldPtr
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
99
virtual
QString
getFieldName
(
size_t
fieldId);
100
virtual
Executable::addr_type
containsAddrType
(
size_t
fieldId,
size_t
subField) {
return
Executable::NOT_ADDR
; }
101
102
bool
isByName
();
103
bool
isDir
();
104
105
WORD
getID
();
106
offset_t
getChildOffsetToDirectory
();
//relative offset!
107
offset_t
getNameOffset
();
108
109
IMAGE_RESOURCE_DIRECTORY_STRING*
getNameStr
();
110
offset_t
getChildAddress
();
111
112
IMAGE_RESOURCE_DIRECTORY_ENTRY *
getEntryPtr
();
113
ResourcesAlbum
*
getAlbumPtr
() {
return
album; }
114
long
getTopEntryID
() {
return
topEntryID; }
115
116
protected
:
117
virtual
void
clear
();
118
119
private
:
120
long
topEntryID;
121
ResourcesAlbum
*album;
122
123
ResourceDirWrapper
* parentDir, *childDir;
124
ResourceLeafWrapper
*childLeaf;
125
};
126
offset_t
uint64_t offset_t
Definition
AbstractByteBuffer.h:20
bufsize_t
size_t bufsize_t
Definition
AbstractByteBuffer.h:17
DataDirEntryWrapper.h
FIELD_NONE
#define FIELD_NONE
Definition
ExeElementWrapper.h:9
ResourceContentFactory.h
ResourceLeafWrapper.h
ResourcesAlbum.h
TOP_ENTRY_ROOT
#define TOP_ENTRY_ROOT
Definition
ResourcesAlbum.h:3
DataDirEntryWrapper::PEFile
friend class PEFile
Definition
DataDirEntryWrapper.h:22
DataDirEntryWrapper::DataDirEntryWrapper
DataDirEntryWrapper(PEFile *pe, pe::dir_entry v_entryType)
Definition
DataDirEntryWrapper.cpp:4
ExeNodeWrapper::getEntriesCount
virtual size_t getEntriesCount()
Definition
ExeNodeWrapper.h:20
Executable::addr_type
addr_type
Definition
Executable.h:42
Executable::NOT_ADDR
@ NOT_ADDR
Definition
Executable.h:43
PENodeWrapper::PEFile
friend class PEFile
Definition
PENodeWrapper.h:39
PENodeWrapper::PENodeWrapper
PENodeWrapper(PEFile *pe, PENodeWrapper *parent=NULL)
Definition
PENodeWrapper.cpp:11
ResourceDirWrapper
Definition
ResourceDirWrapper.h:14
ResourceDirWrapper::getDepth
long getDepth()
Definition
ResourceDirWrapper.h:53
ResourceDirWrapper::ResourceDirWrapper
ResourceDirWrapper(PEFile *pe, ResourcesAlbum *resAlbum=NULL, offset_t rawOffset=0, long depth=0, long topEntryId=TOP_ENTRY_ROOT)
Definition
ResourceDirWrapper.h:28
ResourceDirWrapper::getSize
virtual bufsize_t getSize()
Definition
ResourceDirWrapper.cpp:108
ResourceDirWrapper::ResourceDirFID
ResourceDirFID
Definition
ResourceDirWrapper.h:17
ResourceDirWrapper::TIMESTAMP
@ TIMESTAMP
Definition
ResourceDirWrapper.h:20
ResourceDirWrapper::ID_ENTRIES_NUM
@ ID_ENTRIES_NUM
Definition
ResourceDirWrapper.h:24
ResourceDirWrapper::CHARACTERISTIC
@ CHARACTERISTIC
Definition
ResourceDirWrapper.h:19
ResourceDirWrapper::FIELD_COUNTER
@ FIELD_COUNTER
Definition
ResourceDirWrapper.h:25
ResourceDirWrapper::MAJOR_VER
@ MAJOR_VER
Definition
ResourceDirWrapper.h:21
ResourceDirWrapper::MINOR_VER
@ MINOR_VER
Definition
ResourceDirWrapper.h:22
ResourceDirWrapper::NONE
@ NONE
Definition
ResourceDirWrapper.h:18
ResourceDirWrapper::NAMED_ENTRIES_NUM
@ NAMED_ENTRIES_NUM
Definition
ResourceDirWrapper.h:23
ResourceDirWrapper::wrap
bool wrap()
Definition
ResourceDirWrapper.cpp:73
ResourceDirWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
ResourceDirWrapper.cpp:146
ResourceDirWrapper::getSubFieldsCount
virtual size_t getSubFieldsCount()
Definition
ResourceDirWrapper.h:42
ResourceDirWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField)
Definition
ResourceDirWrapper.cpp:116
ResourceDirWrapper::getFieldsCount
virtual size_t getFieldsCount()
Definition
ResourceDirWrapper.h:41
ResourceDirWrapper::getPtr
virtual void * getPtr()
Definition
ResourceDirWrapper.h:37
ResourceDirWrapper::mainResourceDir
IMAGE_RESOURCE_DIRECTORY * mainResourceDir()
Definition
ResourceDirWrapper.cpp:57
ResourceDirWrapper::getFieldSize
virtual bufsize_t getFieldSize(size_t fieldId, size_t subField)
Definition
ResourceDirWrapper.cpp:132
ResourceDirWrapper::getName
virtual QString getName()
Definition
ResourceDirWrapper.h:40
ResourceDirWrapper::getEntriesAreaSize
bufsize_t getEntriesAreaSize()
Definition
ResourceDirWrapper.h:48
ResourceDirWrapper::getAlbumPtr
ResourcesAlbum * getAlbumPtr()
Definition
ResourceDirWrapper.h:56
ResourceEntryWrapper::getID
WORD getID()
Definition
ResourceDirWrapper.cpp:305
ResourceEntryWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
ResourceDirWrapper.cpp:226
ResourceEntryWrapper::getAlbumPtr
ResourcesAlbum * getAlbumPtr()
Definition
ResourceDirWrapper.h:113
ResourceEntryWrapper::getFieldsCount
virtual size_t getFieldsCount()
Definition
ResourceDirWrapper.h:94
ResourceEntryWrapper::getTopEntryID
long getTopEntryID()
Definition
ResourceDirWrapper.h:114
ResourceEntryWrapper::containsAddrType
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField)
Definition
ResourceDirWrapper.h:100
ResourceEntryWrapper::~ResourceEntryWrapper
virtual ~ResourceEntryWrapper()
Definition
ResourceDirWrapper.h:86
ResourceEntryWrapper::getChildAddress
offset_t getChildAddress()
Definition
ResourceDirWrapper.cpp:326
ResourceEntryWrapper::getEntryPtr
IMAGE_RESOURCE_DIRECTORY_ENTRY * getEntryPtr()
Definition
ResourceDirWrapper.cpp:197
ResourceEntryWrapper::getNameOffset
offset_t getNameOffset()
Definition
ResourceDirWrapper.cpp:253
ResourceEntryWrapper::clear
virtual void clear()
Definition
ResourceDirWrapper.cpp:167
ResourceEntryWrapper::isDir
bool isDir()
Definition
ResourceDirWrapper.cpp:245
ResourceEntryWrapper::translateType
static QString translateType(WORD id)
Definition
ResourceDirWrapper.cpp:276
ResourceEntryWrapper::isByName
bool isByName()
Definition
ResourceDirWrapper.cpp:237
ResourceEntryWrapper::getName
virtual QString getName()
Definition
ResourceDirWrapper.h:93
ResourceEntryWrapper::wrap
bool wrap()
Definition
ResourceDirWrapper.cpp:176
ResourceEntryWrapper::getNameStr
IMAGE_RESOURCE_DIRECTORY_STRING * getNameStr()
Definition
ResourceDirWrapper.cpp:266
ResourceEntryWrapper::ResourceEntryWrapper
ResourceEntryWrapper(PEFile *pe, ResourceDirWrapper *parentDir, size_t entryNumber, long topEntryId, ResourcesAlbum *resAlbum)
Definition
ResourceDirWrapper.h:79
ResourceEntryWrapper::getChildOffsetToDirectory
offset_t getChildOffsetToDirectory()
Definition
ResourceDirWrapper.cpp:314
ResourceEntryWrapper::FieldID
FieldID
Definition
ResourceDirWrapper.h:70
ResourceEntryWrapper::NONE
@ NONE
Definition
ResourceDirWrapper.h:71
ResourceEntryWrapper::NAME_ID_ADDR
@ NAME_ID_ADDR
Definition
ResourceDirWrapper.h:72
ResourceEntryWrapper::FIELD_COUNTER
@ FIELD_COUNTER
Definition
ResourceDirWrapper.h:74
ResourceEntryWrapper::OFFSET_TO_DATA
@ OFFSET_TO_DATA
Definition
ResourceDirWrapper.h:73
ResourceEntryWrapper::getPtr
virtual void * getPtr()
Definition
ResourceDirWrapper.h:90
ResourceEntryWrapper::getSubFieldsCount
virtual size_t getSubFieldsCount()
Definition
ResourceDirWrapper.h:95
ResourceEntryWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ResourceDirWrapper.cpp:212
ResourceEntryWrapper::getSize
virtual bufsize_t getSize()
Definition
ResourceDirWrapper.h:91
ResourceLeafWrapper
Definition
ResourceLeafWrapper.h:10
ResourcesAlbum
Definition
ResourcesAlbum.h:27
Generated by
1.17.0