#pragma once class UserProc; class DllProc; /////////////////////// // リロケーション情報 /////////////////////// class CReloc{ public: char *buffer; int length; DWORD NowPageRVAToReloc; DWORD NowCountAddrToReloc; CReloc(); ~CReloc(); void AllFree(void); void copy(CReloc *por); private: std::vector codeSectionAddresses; public: void AddSchedule_CodeSection(DWORD addr); private: std::vector dataSectionAddresses; public: void AddSchedule_DataSection(DWORD addr); private: void __add(DWORD addr); public: void ResetRelocBuffer(void); }; extern CReloc *pobj_Reloc; ////////////////////////// // 一般スケジューリング ////////////////////////// #define SCHEDULE_FLAG_RELOC 1 class CSchedule{ int flag; public: int *pObpValues; int num; CSchedule(); ~CSchedule(); void SetFlag(int flag); void add(); void move(int iStartPos,int iSize,int offset); }; extern CSchedule *pobj_DataTableSchedule; extern CSchedule *pobj_GlobalVarSchedule; ///////////////////////////////////////// // インポート アドレス スケジューリング ///////////////////////////////////////// class CImportAddrSchedule:public CSchedule{ public: const DllProc **ppdi; CImportAddrSchedule(); ~CImportAddrSchedule(); void add(const DllProc *pDllProc); }; extern CImportAddrSchedule *pobj_ImportAddrSchedule; ///////////////////////////////////////// // プロシージャ アドレス スケジューリング ///////////////////////////////////////// class CSubAddrSchedule:public CSchedule{ public: const UserProc **ppsi; BOOL *pbCall; CSubAddrSchedule(); ~CSubAddrSchedule(); void add(const UserProc *pUserProc,BOOL bCall); }; extern CSubAddrSchedule *pobj_SubAddrSchedule; void NativeBuffer_StaticRelocation(int iStartPos,int iSize,int offset);