BearParser
Portable Executable parsing library (from PE-bear)
Loading...
Searching...
No Matches
DataDirEntryWrapper.cpp
Go to the documentation of this file.
2#include "pe/PEFile.h"
3
4DataDirEntryWrapper::DataDirEntryWrapper(PEFile* pe, pe:: dir_entry v_entryType)
5 : PENodeWrapper(pe), entryType(v_entryType)
6{
7 wrap();
8}
9
11{
12
13 if (m_PE == NULL) return NULL;
14
15 IMAGE_DATA_DIRECTORY *d = m_PE->getDataDirectory();
16 return d;
17}
18
20{
21 if (this->entryType >= pe::DIR_ENTRIES_COUNT) return INVALID_ADDR;
22
23 IMAGE_DATA_DIRECTORY *d = getDataDirectory();
24 if (!d) return INVALID_ADDR;
25
26 offset_t rva = static_cast<offset_t>(d[this->entryType].VirtualAddress);
27 if (rva == 0) return INVALID_ADDR;
28 return rva;
29}
30
32{
33 if (this->entryType >= pe::DIR_ENTRIES_COUNT) return 0;
34 IMAGE_DATA_DIRECTORY *d = getDataDirectory();
35 if (!d) return 0;
36
37 bufsize_t dirSize = static_cast<bufsize_t>(d[this->entryType].Size);
38 if (!trimToExeSize) {
39 return dirSize;
40 }
41
42 if (!this->m_Exe) return 0; // should never happen
43
44 offset_t dirRva = d[this->entryType].VirtualAddress;
45 offset_t dirRaw = this->m_Exe->rvaToRaw(dirRva);
46 if (dirRaw == INVALID_ADDR) {
47 return 0;
48 }
49 bufsize_t fullSize = this->m_Exe->getContentSize();
50 bufsize_t remainingSize = bufsize_t(fullSize - dirRaw);
51
52 return (dirSize < remainingSize) ? dirSize : remainingSize;
53}
uint32_t bufsize_t
const offset_t INVALID_ADDR
uint64_t offset_t
bufsize_t getDirEntrySize(bool trimToExeSize=false)
offset_t getDirEntryAddress()
int entryType
DataDirEntryWrapper(PEFile *pe, pe::dir_entry v_entryType)
IMAGE_DATA_DIRECTORY * getDataDirectory()
virtual bool wrap()
virtual offset_t rvaToRaw(offset_t rva)=0
virtual bufsize_t getContentSize()
Definition: Executable.h:51
Definition: PEFile.h:41
IMAGE_DATA_DIRECTORY * getDataDirectory()
Definition: PEFile.cpp:235
PEFile * m_PE
Definition: PENodeWrapper.h:36