GPCS4/3rdParty/tinydbr/windows/api_helper.h
Asuka 279ba8e2ed add tinydbr library and reconstruct 3rdparty libraries
now we have the full power to develop this shit
2022-03-11 02:05:59 +08:00

73 lines
1.7 KiB
C++

#pragma once
#include "common.h"
#include <unordered_set>
#include <list>
class Executor;
class ApiHelper
{
public:
ApiHelper(Executor& executor);
virtual ~ApiHelper();
virtual void ExtractAndProtectCodeRanges(
void* module_base,
size_t min_address,
size_t max_address,
std::list<AddressRange>* executable_ranges,
size_t* code_size);
virtual void ProtectCodeRanges(
std::list<AddressRange>* executable_ranges);
virtual uint32_t GetImageSize(void* base_address) = 0;
virtual uint32_t GetProcOffset(void* module, const char* name) = 0;
virtual void GetExceptionHandlers(
size_t module_header, std::unordered_set<size_t>& handlers) = 0;
protected:
Executor& m_executor;
};
///////////////////////////////////////////////////////////////////
class ModuleHelper : public ApiHelper
{
public:
ModuleHelper(Executor& executor);
virtual ~ModuleHelper();
virtual uint32_t GetImageSize(void* base_address) override;
virtual uint32_t GetProcOffset(void* module, const char* name) override;
virtual void GetExceptionHandlers(
size_t module_header, std::unordered_set<size_t>& handlers) override;
private:
};
///////////////////////////////////////////////////////////////////
class ShellcodeHelper : public ApiHelper
{
public:
ShellcodeHelper(Executor& executor);
virtual ~ShellcodeHelper();
virtual uint32_t GetImageSize(void* base_address) override;
virtual uint32_t GetProcOffset(void* module, const char* name) override;
virtual void GetExceptionHandlers(
size_t module_header, std::unordered_set<size_t>& handlers) override;
private:
const TargetModule* GetModule(void* base_address);
};