#pragma once class Linker { NativeCode nativeCode; DataTable dataTable; DWORD imageBase; public: Linker() { } const NativeCode &GetNativeCode() const { return nativeCode; } const DataTable &GetDataTable() const { return dataTable; } void SetImageBase( DWORD imageBase ) { this->imageBase = imageBase; } // データテーブルスケジュール void ResolveDataTableSchedules( long dataSectionBaseOffset ); // Catchアドレス スケジュール void ResolveCatchAddressSchedules( long codeSectionBaseOffset ); // DLL関数スケジュール void ResolveDllProcSchedules( long codeSectionBaseOffset, long importSectionBaseOffset, long lookupSize, long hintSize ); // ユーザ定義関数スケジュール void ResolveUserProcSchedules( long codeSectionBaseOffset ); // グローバル変数スケジュール void ResolveGlobalVarSchedules( long rwSectionBaseOffset ); // vtblスケジュール void ResolveVtblSchedule( long dataSectionBaseOffset ); // TypeInfoスケジュール void ResolveTypeInfoSchedule( long dataSectionBaseOffset ); // リンク void Link( ObjectModule &masterObjectModule ); // データテーブルをセット void SetDataTable( DataTable &dataTable ); private: Linker(Linker const&); Linker& operator =(Linker const&); };