/////////////////////// // リロケーション情報 /////////////////////// class CReloc{ public: char *buffer; int length; DWORD NowPageRVAToReloc; DWORD NowCountAddrToReloc; CReloc(); ~CReloc(); void AllFree(void); void copy(CReloc *por); private: DWORD *pdwData_CodeSection; int iNum_CodeSection; public: void AddSchedule_CodeSection(DWORD addr); private: DWORD *pdwData_DataSection; int iNum_DataSection; 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: DECLAREINFO **ppdi; CImportAddrSchedule(); ~CImportAddrSchedule(); void add(DECLAREINFO *pdi); }; extern CImportAddrSchedule *pobj_ImportAddrSchedule; ///////////////////////////////////////// // プロシージャ アドレス スケジューリング ///////////////////////////////////////// class CSubAddrSchedule:public CSchedule{ public: SubInfo **ppsi; BOOL *pbCall; CSubAddrSchedule(); ~CSubAddrSchedule(); void add(SubInfo *psi,BOOL bCall); }; extern CSubAddrSchedule *pobj_SubAddrSchedule; ///////////////////////////////////// // 一時スケジューリングポインタ ///////////////////////////////////// class CTempSchedule{ int **ppObpValues; int num; public: CTempSchedule(); ~CTempSchedule(); void lock(int *pobp); void unlock(); void move(int iStartPos,int iSize,int offset); }; extern CTempSchedule *pobj_TempSchedule; void NativeBuffer_StaticRelocation(int iStartPos,int iSize,int offset);