Ignore:
Timestamp:
Aug 12, 2007, 1:25:20 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r273 r276  
    122122    extern BOOL bDebugCompile;
    123123    extern DWORD ImageBase;
    124     extern int obp_AllocSize;
    125124    extern char *basbuf;
    126125    extern char OutputFileName[MAX_PATH];
     
    355354
    356355
    357 
    358 
    359     //データテーブルスケジュール
    360     pobj_DataTableSchedule=new CSchedule();
    361     pobj_DataTableSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
    362 
    363     //インポートテーブルスケジュール
    364     pobj_ImportAddrSchedule=new CImportAddrSchedule();
    365     pobj_ImportAddrSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
    366 
    367     //プロシージャポインタスケジュール
    368     pobj_SubAddrSchedule=new CSubAddrSchedule();
    369 
    370     //グローバル変数アドレススケジュール
    371     pobj_GlobalVarSchedule=new CSchedule();
    372     pobj_GlobalVarSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
    373 
    374356    //グローバル変数の初期バッファ
    375357    extern BYTE *initGlobalBuf;
     
    379361    pobj_Reloc=new CReloc();
    380362
    381     extern char *OpBuffer;
    382     extern int obp;
    383     obp_AllocSize=8192*2;
    384     OpBuffer=(char *)malloc(obp_AllocSize);
    385     obp=0;
    386 
    387363    //レキシカルスコープ情報を初期化
    388     compiler.codeGenerator.lexicalScopes.Init(obp);
     364    compiler.codeGenerator.lexicalScopes.Init( 0 );
     365    //compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() );
    389366
    390367
     
    702679
    703680            if( pUserProc->GetName() == "DllMain" ){
    704                 // TODO: 未完成
    705                 DllMain_EntryPoint=pUserProc->_beginOpAddressOld;
     681                DllMain_EntryPoint = pUserProc->GetBeginOpAddress();
    706682            }
    707683
    708684            lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
    709             lpdwExportAddressTable[ExportNum]=pUserProc->_beginOpAddressOld;
     685            lpdwExportAddressTable[ExportNum] = pUserProc->GetBeginOpAddress();
    710686
    711687            lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
     
    11431119
    11441120
    1145     //////////////////////////////
    1146     // データテーブルスケジュール
    1147     for(i=0;i<pobj_DataTableSchedule->num;i++){
    1148         *((long *)(OpBuffer+pobj_DataTableSchedule->pObpValues[i]))+=ImageBase+MemPos_DataSection;
    1149     }
    1150     delete pobj_DataTableSchedule;
    1151 
    1152 
    1153     //////////////////////////////////
    1154     // インポートテーブルスケジュール(インポート アドレス テーブルを指し示させる)
    1155     for(i=0;i<pobj_ImportAddrSchedule->num;i++){
    1156         const DllProc *pDllProc=pobj_ImportAddrSchedule->ppdi[i];
    1157         *((long *)(OpBuffer+pobj_ImportAddrSchedule->pObpValues[i]))=
    1158             ImageBase+
    1159             MemPos_ImportSection+
    1160             LookupSize+         //ルックアップテーブル
    1161             HintSize+           //ヒント名(関数名)テーブル
    1162             pDllProc->GetLookupAddress();
    1163     }
    1164     delete pobj_ImportAddrSchedule;
    1165 
    1166 
    1167     ////////////////////////////////////
    1168     // プロシージャポインタスケジュール
    1169     for(i=0;i<pobj_SubAddrSchedule->num;i++){
    1170         if(pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld==0
    1171             &&pobj_SubAddrSchedule->ppsi[i]->_endOpAddressOld==0){
    1172             SetError(300,NULL,-1);
    1173         }
    1174 
    1175         if(pobj_SubAddrSchedule->pbCall[i]){
    1176             *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1177                 pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
    1178         }
    1179         else{
    1180             *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1181                 pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld+ImageBase+MemPos_CodeSection;
    1182         }
    1183     }
    1184     delete pobj_SubAddrSchedule;
    1185 
    1186 
    11871121    if( compiler.IsDll() ){
    11881122        //DLLの場合はリロケーション情報を生成
    11891123        pobj_Reloc->ResetRelocBuffer();
    11901124    }
    1191 
    1192 
    1193 
    1194     //////////////////////////////////////
    1195     // グローバル変数アドレススケジュール
    1196     //////////////////////////////////////
    1197 
    1198     /*
    1199     GlobalArea1 - 初期バッファあり
    1200     GlobalArea2 - 初期バッファなし
    1201     */
    1202     for(i=0;i<pobj_GlobalVarSchedule->num;i++){
    1203         if(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x80000000){
    1204             //初期バッファなし
    1205             *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=
    1206                 compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() +
    1207                 (*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+
    1208                 ImageBase+MemPos_RWSection;
    1209         }
    1210         else{
    1211             //初期バッファあり
    1212             *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))+=
    1213                 ImageBase+MemPos_RWSection;
    1214         }
    1215     }
    1216     delete pobj_GlobalVarSchedule;
    12171125
    12181126
     
    17841692    HeapDefaultFree(initGlobalBuf);
    17851693
    1786     //コードバッファを解放
    1787     free(OpBuffer);
    1788     OpBuffer=0;
    1789 
    17901694    //リソースセクションバッファを解放
    17911695    HeapDefaultFree(RSrcSectionBuffer);
Note: See TracChangeset for help on using the changeset viewer.