12#define PAGE_SIZE 0x1000
21 template <
typename INT_TYPE>
24 if (unit == 0)
return size;
26 INT_TYPE rem = size % unit;
27 if (rem == 0)
return size;
29 return size + (unit - rem);
50 bool is64bit(IN
const BYTE *pe_buffer);
57 IN
const BYTE *pe_buffer,
58 IN OPTIONAL
size_t buffer_size=0
74 LPVOID
get_optional_hdr(IN
const BYTE* payload, IN
const size_t buffer_size);
80 IN
const BYTE* payload,
81 IN
const size_t buffer_size
92 IMAGE_DATA_DIRECTORY*
get_directory_entry(IN
const BYTE* pe_buffer, IN DWORD dir_id, IN
bool allow_empty =
false);
97 template <
typename IMAGE_TYPE_DIRECTORY>
101 if (!my_dir)
return nullptr;
103 DWORD dir_addr = my_dir->VirtualAddress;
104 if (dir_addr == 0)
return nullptr;
106 return (IMAGE_TYPE_DIRECTORY*)(dir_addr + (ULONG_PTR)modulePtr);
136 IN
const BYTE* buffer,
137 IN
const size_t buffer_size
149 IN
const BYTE* pe_buffer,
150 IN
const size_t buffer_size,
151 IN
size_t section_num
167 bool is_dot_net(BYTE *pe_buffer,
size_t pe_buffer_size);
193 IN
const BYTE* pe_buffer,
194 IN
size_t const buffer_size,
195 IN
const IMAGE_DATA_DIRECTORY* dotNetDir
206 bool set_sec_alignment(IN OUT BYTE* pe_buffer, IN
bool is_raw, IN DWORD new_alignment);
212 IN
const BYTE* pe_hdr,
213 IN
const PIMAGE_SECTION_HEADER sec_hdr,
223 PIMAGE_SECTION_HEADER
get_last_section(IN
const PBYTE pe_buffer, IN
size_t pe_size, IN
bool is_raw);
232 IN
const PBYTE pe_buffer,
Definitions of the used buffer types. Functions for their allocation and deallocation.
bool update_entry_point_rva(IN OUT BYTE *pe_buffer, IN DWORD ep)
bool set_sec_alignment(IN OUT BYTE *pe_buffer, IN bool is_raw, IN DWORD new_alignment)
bool has_relocations(IN const BYTE *pe_buffer)
DWORD get_entry_point_rva(IN const BYTE *pe_buffer)
WORD get_nt_hdr_architecture(IN const BYTE *pe_buffer)
bool set_subsystem(IN OUT BYTE *payload, IN WORD subsystem)
bool is_dot_net(BYTE *pe_buffer, size_t pe_buffer_size)
DWORD get_virtual_sec_size(IN const BYTE *pe_hdr, IN const PIMAGE_SECTION_HEADER sec_hdr, IN bool rounded)
const IMAGE_FILE_HEADER * get_file_hdr(IN const BYTE *payload, IN const size_t buffer_size)
bool update_image_base(IN OUT BYTE *payload, IN ULONGLONG destImageBase)
bool is_valid_sections_hdr_offset(IN const BYTE *buffer, IN const size_t buffer_size)
ULONGLONG get_image_base(IN const BYTE *pe_buffer)
WORD get_file_characteristics(IN const BYTE *payload)
bool is_valid_sections_alignment(IN const BYTE *buffer, IN const SIZE_T buffer_size, IN bool is_raw)
PIMAGE_SECTION_HEADER get_section_hdr(IN const BYTE *pe_buffer, IN const size_t buffer_size, IN size_t section_num)
IMAGE_TYPE_DIRECTORY * get_type_directory(IN HMODULE modulePtr, IN DWORD dir_id)
IMAGE_NT_HEADERS64 * get_nt_hdrs64(IN const BYTE *pe_buffer)
IMAGE_COR20_HEADER * get_dotnet_hdr(IN const BYTE *pe_buffer, IN size_t const buffer_size, IN const IMAGE_DATA_DIRECTORY *dotNetDir)
DWORD get_image_size(IN const BYTE *payload)
DWORD get_sec_alignment(IN const BYTE *modulePtr, IN bool is_raw)
INT_TYPE round_up_to_unit(const INT_TYPE size, const INT_TYPE unit)
bool is64bit(IN const BYTE *pe_buffer)
size_t get_sections_count(IN const BYTE *buffer, IN const size_t buffer_size)
IMAGE_NT_HEADERS32 * get_nt_hdrs32(IN const BYTE *pe_buffer)
bool update_image_size(IN OUT BYTE *payload, IN DWORD new_img_size)
const ULONGLONG MAX_HEADER_SIZE
DWORD get_hdrs_size(IN const BYTE *pe_buffer)
IMAGE_DATA_DIRECTORY * get_directory_entry(IN const BYTE *pe_buffer, IN DWORD dir_id, IN bool allow_empty=false)
PIMAGE_SECTION_HEADER get_last_section(IN const PBYTE pe_buffer, IN size_t pe_size, IN bool is_raw)
WORD get_dll_characteristics(IN const BYTE *payload)
IMAGE_EXPORT_DIRECTORY * get_export_directory(IN HMODULE modulePtr)
BYTE * get_nt_hdrs(IN const BYTE *pe_buffer, IN OPTIONAL size_t buffer_size=0)
DWORD calc_pe_size(IN const PBYTE pe_buffer, IN size_t pe_size, IN bool is_raw)
bool is_module_dll(IN const BYTE *payload)
WORD get_subsystem(IN const BYTE *payload)
LPVOID get_optional_hdr(IN const BYTE *payload, IN const size_t buffer_size)