8#include <unordered_set>
40 CollectRelocs(
const BYTE* pe_buffer,
size_t buffer_size, IN
bool _is64bit, OUT std::unordered_set<ULONGLONG>& _relocs)
51 ULONGLONG* relocateAddr = (ULONGLONG*)((ULONG_PTR)relocField);
55 rva = (*relocateAddr);
58 DWORD* relocateAddr = (DWORD*)((ULONG_PTR)relocField);
62 rva = ULONGLONG(*relocateAddr);
69 std::unordered_set<ULONGLONG>&
relocs;
86 bool relocate_module(IN PBYTE modulePtr, IN SIZE_T moduleSize, IN ULONGLONG newBase, IN ULONGLONG oldBase = 0);
105 bool virtual_addr_to_rva(IN
const PBYTE imgBase, IN
const size_t imgSize, IN ULONGLONG virtualAddr, OUT DWORD& outRVA, IN std::unordered_set<ULONGLONG>* relocs=
nullptr);
Definitions of the used buffer types. Functions for their allocation and deallocation.
CollectRelocs(const BYTE *pe_buffer, size_t buffer_size, IN bool _is64bit, OUT std::unordered_set< ULONGLONG > &_relocs)
virtual bool processRelocField(ULONG_PTR relocField)
std::unordered_set< ULONGLONG > & relocs
virtual ~RelocBlockCallback()
RelocBlockCallback(bool _is64bit)
virtual bool processRelocField(ULONG_PTR relocField)=0
bool virtual_addr_to_rva(IN const PBYTE imgBase, IN const size_t imgSize, IN ULONGLONG virtualAddr, OUT DWORD &outRVA, IN std::unordered_set< ULONGLONG > *relocs=nullptr)
bool validate_ptr(IN const void *buffer_bgn, IN size_t buffer_size, IN const void *field_bgn, IN size_t field_size)
bool process_relocation_table(IN PVOID modulePtr, IN SIZE_T moduleSize, IN RelocBlockCallback *callback)
struct peconv::_BASE_RELOCATION_ENTRY BASE_RELOCATION_ENTRY
bool relocate_module(IN PBYTE modulePtr, IN SIZE_T moduleSize, IN ULONGLONG newBase, IN ULONGLONG oldBase=0)
bool has_valid_relocation_table(IN const PBYTE modulePtr, IN const size_t moduleSize)