BearParser
Portable Executable parsing library (from PE-bear)
Toggle main menu visibility
Loading...
Searching...
No Matches
parser
include
bearparser
pe
ExceptionDirWrapper.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
DataDirEntryWrapper.h
"
4
5
class
ExceptionEntryWrapper
;
6
class
ExceptionDirWrapper
;
7
8
class
ExceptionDirWrapper
:
public
DataDirEntryWrapper
9
{
10
public
:
11
ExceptionDirWrapper
(
PEFile
* pe)
12
:
DataDirEntryWrapper
(pe, pe::DIR_EXCEPTION), parsedSize(0) {
wrap
(); }
13
14
bool
wrap
();
15
16
virtual
void
*
getPtr
();
17
virtual
bufsize_t
getSize
() {
return
parsedSize; }
18
19
virtual
QString
getName
() {
return
"Exceptions Dir."
; }
20
virtual
size_t
getFieldsCount
() {
return
entries
.size(); }
21
22
virtual
void
*
getFieldPtr
(
size_t
fieldId,
size_t
subField) {
return
getSubfieldPtr
(fieldId, subField); }
23
virtual
QString
getFieldName
(
size_t
fieldId) {
return
"Exceptions Block"
; }
24
virtual
QString
getFieldName
(
size_t
fieldId,
size_t
subField) {
return
getSubfieldName
(fieldId, subField); }
25
26
private
:
27
bufsize_t
parsedSize;
28
29
friend
class
ExceptionEntryWrapper
;
30
};
31
32
#define ARM_XDATA_FLAG 0x3
33
34
class
ExceptionEntryWrapper
:
public
ExeNodeWrapper
35
{
36
public
:
37
// fields :
38
enum
ExceptionBlockFID_Intel
{
39
NONE
=
FIELD_NONE
,
40
BEGIN_ADDR
,
41
END_ADDR
,
42
UNWIND_INFO_ADDR
,
43
FIELD_COUNTER
44
};
45
46
enum
ExceptionBlockFID_Arm64
{
47
ARM_EXCEPT_NONE
=
FIELD_NONE
,
48
ARM_EXCEPT_START
=
ExceptionEntryWrapper::BEGIN_ADDR
,
49
ARM_EXCEPT_XDATA
=
ExceptionEntryWrapper::END_ADDR
,
50
ARM_EXCEPT_FIELD_COUNTER
51
};
52
53
ExceptionEntryWrapper
(
Executable
*pe,
ExceptionDirWrapper
*parentDir,
size_t
entryNumber)
54
:
ExeNodeWrapper
(pe, parentDir, entryNumber), cachedRaw(
INVALID_ADDR
) { this->parentDir = parentDir;}
55
56
bool
wrap
() {
return
true
; }
57
58
// full structure boundaries
59
virtual
void
*
getPtr
();
60
61
virtual
bufsize_t
getSize
();
62
virtual
QString
getName
() {
return
"Exceptions Block"
; }
63
virtual
size_t
getFieldsCount
();
64
virtual
size_t
getSubFieldsCount
() {
return
1; }
65
66
// specific field boundaries
67
virtual
void
*
getFieldPtr
(
size_t
fieldId,
size_t
subField =
FIELD_NONE
);
68
virtual
QString
getFieldName
(
size_t
fieldId);
69
virtual
Executable::addr_type
containsAddrType
(
size_t
fieldId,
size_t
subField);
70
71
private
:
72
bufsize_t
_getSize();
73
offset_t
cachedRaw;
74
ExceptionDirWrapper
* parentDir;
75
};
76
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
DataDirEntryWrapper.h
FIELD_NONE
#define FIELD_NONE
Definition
ExeElementWrapper.h:9
DataDirEntryWrapper::PEFile
friend class PEFile
Definition
DataDirEntryWrapper.h:22
DataDirEntryWrapper::DataDirEntryWrapper
DataDirEntryWrapper(PEFile *pe, pe::dir_entry v_entryType)
Definition
DataDirEntryWrapper.cpp:4
ExceptionDirWrapper
Definition
ExceptionDirWrapper.h:9
ExceptionDirWrapper::getFieldName
virtual QString getFieldName(size_t fieldId, size_t subField)
Definition
ExceptionDirWrapper.h:24
ExceptionDirWrapper::ExceptionDirWrapper
ExceptionDirWrapper(PEFile *pe)
Definition
ExceptionDirWrapper.h:11
ExceptionDirWrapper::getName
virtual QString getName()
Definition
ExceptionDirWrapper.h:19
ExceptionDirWrapper::getFieldsCount
virtual size_t getFieldsCount()
Definition
ExceptionDirWrapper.h:20
ExceptionDirWrapper::getSize
virtual bufsize_t getSize()
Definition
ExceptionDirWrapper.h:17
ExceptionDirWrapper::ExceptionEntryWrapper
friend class ExceptionEntryWrapper
Definition
ExceptionDirWrapper.h:29
ExceptionDirWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField)
Definition
ExceptionDirWrapper.h:22
ExceptionDirWrapper::wrap
bool wrap()
Definition
ExceptionDirWrapper.cpp:18
ExceptionDirWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
ExceptionDirWrapper.h:23
ExceptionDirWrapper::getPtr
virtual void * getPtr()
Definition
ExceptionDirWrapper.cpp:53
ExceptionEntryWrapper
Definition
ExceptionDirWrapper.h:35
ExceptionEntryWrapper::getPtr
virtual void * getPtr()
Definition
ExceptionDirWrapper.cpp:72
ExceptionEntryWrapper::ExceptionEntryWrapper
ExceptionEntryWrapper(Executable *pe, ExceptionDirWrapper *parentDir, size_t entryNumber)
Definition
ExceptionDirWrapper.h:53
ExceptionEntryWrapper::getName
virtual QString getName()
Definition
ExceptionDirWrapper.h:62
ExceptionEntryWrapper::ExceptionBlockFID_Arm64
ExceptionBlockFID_Arm64
Definition
ExceptionDirWrapper.h:46
ExceptionEntryWrapper::ARM_EXCEPT_FIELD_COUNTER
@ ARM_EXCEPT_FIELD_COUNTER
Definition
ExceptionDirWrapper.h:50
ExceptionEntryWrapper::ARM_EXCEPT_XDATA
@ ARM_EXCEPT_XDATA
Definition
ExceptionDirWrapper.h:49
ExceptionEntryWrapper::ARM_EXCEPT_START
@ ARM_EXCEPT_START
Definition
ExceptionDirWrapper.h:48
ExceptionEntryWrapper::ARM_EXCEPT_NONE
@ ARM_EXCEPT_NONE
Definition
ExceptionDirWrapper.h:47
ExceptionEntryWrapper::wrap
bool wrap()
Definition
ExceptionDirWrapper.h:56
ExceptionEntryWrapper::getFieldPtr
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
Definition
ExceptionDirWrapper.cpp:122
ExceptionEntryWrapper::getSubFieldsCount
virtual size_t getSubFieldsCount()
Definition
ExceptionDirWrapper.h:64
ExceptionEntryWrapper::getFieldsCount
virtual size_t getFieldsCount()
Definition
ExceptionDirWrapper.cpp:111
ExceptionEntryWrapper::containsAddrType
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField)
Definition
ExceptionDirWrapper.cpp:168
ExceptionEntryWrapper::getFieldName
virtual QString getFieldName(size_t fieldId)
Definition
ExceptionDirWrapper.cpp:149
ExceptionEntryWrapper::getSize
virtual bufsize_t getSize()
Definition
ExceptionDirWrapper.cpp:103
ExceptionEntryWrapper::ExceptionBlockFID_Intel
ExceptionBlockFID_Intel
Definition
ExceptionDirWrapper.h:38
ExceptionEntryWrapper::BEGIN_ADDR
@ BEGIN_ADDR
Definition
ExceptionDirWrapper.h:40
ExceptionEntryWrapper::NONE
@ NONE
Definition
ExceptionDirWrapper.h:39
ExceptionEntryWrapper::UNWIND_INFO_ADDR
@ UNWIND_INFO_ADDR
Definition
ExceptionDirWrapper.h:42
ExceptionEntryWrapper::FIELD_COUNTER
@ FIELD_COUNTER
Definition
ExceptionDirWrapper.h:43
ExceptionEntryWrapper::END_ADDR
@ END_ADDR
Definition
ExceptionDirWrapper.h:41
ExeElementWrapper::Executable
friend class Executable
Definition
ExeElementWrapper.h:67
ExeNodeWrapper::getSubfieldPtr
virtual void * getSubfieldPtr(size_t fieldId, size_t subField)
Definition
ExeNodeWrapper.cpp:39
ExeNodeWrapper::getSubfieldName
virtual QString getSubfieldName(size_t fieldId, size_t subField)
Definition
ExeNodeWrapper.cpp:55
ExeNodeWrapper::ExeNodeWrapper
ExeNodeWrapper(Executable *pe, ExeNodeWrapper *parent=NULL)
Definition
ExeNodeWrapper.cpp:3
ExeNodeWrapper::entries
std::vector< ExeNodeWrapper * > entries
Definition
ExeNodeWrapper.h:56
Executable::addr_type
addr_type
Definition
Executable.h:42
Generated by
1.17.0