Changeset 75 in dev for BasicCompiler32/MakePeHdr.cpp


Ignore:
Timestamp:
Mar 20, 2007, 4:36:16 AM (18 years ago)
Author:
dai_9181
Message:

TYPEINFO→Typeへのリファクタリングを実施。64bitはほぼ完了。32bitが全般的に未完成。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/MakePeHdr.cpp

    r73 r75  
    88// 特殊関数の構造体ポインタ
    99////////////////////////////
    10 SubInfo
     10UserProc
    1111    *pSub_System_StartupProgram,
    1212    *pSub_DebugSys_StartProc,
     
    150150
    151151    //関数ポインタ情報を初期化
    152     extern PROCPTRINFO *pProcPtrInfo;
     152    extern ProcPointer **ppProcPtrInfo;
    153153    extern int ProcPtrInfoNum;
    154     pProcPtrInfo=(PROCPTRINFO *)HeapAlloc(hHeap,0,1);
     154    ppProcPtrInfo=(ProcPointer **)HeapAlloc(hHeap,0,1);
    155155    ProcPtrInfoNum=0;
    156156
     
    184184
    185185    if(pSub_System_StartupProgram=GetSubHash("_System_StartupProgram",1))
    186         pSub_System_StartupProgram->bUse=1;
     186        pSub_System_StartupProgram->Using();
    187187
    188188    if(pSub_DebugSys_StartProc=GetSubHash("_DebugSys_StartProc",1))
    189         pSub_DebugSys_StartProc->bUse=1;
     189        pSub_DebugSys_StartProc->Using();
    190190
    191191    if(pSub_DebugSys_EndProc=GetSubHash("_DebugSys_EndProc",1))
    192         pSub_DebugSys_EndProc->bUse=1;
     192        pSub_DebugSys_EndProc->Using();
    193193
    194194    if(pSub_DebugSys_SaveContext=GetSubHash("_DebugSys_SaveContext",1))
    195         pSub_DebugSys_SaveContext->bUse=1;
     195        pSub_DebugSys_SaveContext->Using();
    196196
    197197    if(pSub_System_GetEip=GetSubHash("_System_GetEip",1)){
    198         pSub_System_GetEip->bUse=1;
    199         pSub_System_GetEip->bSystem=1;
     198        pSub_System_GetEip->Using();
     199        pSub_System_GetEip->ThisIsSystemProc();
    200200    }
    201201
    202202    if(pSub_System_InitDllGlobalVariables=GetSubHash("_System_InitDllGlobalVariables",1)){
    203         pSub_System_InitDllGlobalVariables->bUse=1;
    204         pSub_System_InitDllGlobalVariables->bSystem=1;
     203        pSub_System_InitDllGlobalVariables->Using();
     204        pSub_System_InitDllGlobalVariables->ThisIsSystemProc();
    205205    }
    206206
    207207    if(pSub_System_InitStaticLocalVariables=GetSubHash("_System_InitStaticLocalVariables",1)){
    208         pSub_System_InitStaticLocalVariables->bUse=1;
    209         pSub_System_InitStaticLocalVariables->bSystem=1;
     208        pSub_System_InitStaticLocalVariables->Using();
     209        pSub_System_InitStaticLocalVariables->ThisIsSystemProc();
    210210    }
    211211
    212212    if(pSub_System_Call_Destructor_of_GlobalObject=GetSubHash("_System_Call_Destructor_of_GlobalObject",1)){
    213         pSub_System_Call_Destructor_of_GlobalObject->bUse=1;
    214         pSub_System_Call_Destructor_of_GlobalObject->bSystem=1;
     213        pSub_System_Call_Destructor_of_GlobalObject->Using();
     214        pSub_System_Call_Destructor_of_GlobalObject->ThisIsSystemProc();
    215215    }
    216216
    217217    if(pSub_System_GetSp=GetSubHash("_System_GetSp",1)){
    218         pSub_System_GetSp->bUse=1;
    219         pSub_System_GetSp->bSystem=1;
     218        pSub_System_GetSp->Using();
     219        pSub_System_GetSp->ThisIsSystemProc();
    220220    }
    221221
    222222    if(pSub_pow=GetSubHash("pow",1))
    223         pSub_pow->bUse=1;
     223        pSub_pow->Using();
    224224
    225225    if(pSub_calloc=GetSubHash("calloc",1))
    226         pSub_calloc->bUse=1;
     226        pSub_calloc->Using();
    227227
    228228    if(pSub_realloc=GetSubHash("realloc",1))
    229         pSub_realloc->bUse=1;
     229        pSub_realloc->Using();
    230230
    231231    if(pSub_free=GetSubHash("free",1))
    232         pSub_free->bUse=1;
     232        pSub_free->Using();
    233233
    234234    if( pSub_System_GC_malloc_ForObject = GetSubHash( "_System_GC_malloc_ForObject",1 ) )
    235         pSub_System_GC_malloc_ForObject->bUse = 1;
     235        pSub_System_GC_malloc_ForObject->Using();
    236236
    237237    if( pSub_System_GC_malloc_ForObjectPtr = GetSubHash( "_System_GC_malloc_ForObjectPtr",1 ) )
    238         pSub_System_GC_malloc_ForObjectPtr->bUse = 1;
     238        pSub_System_GC_malloc_ForObjectPtr->Using();
    239239
    240240    if( pSub_System_GC_free_for_SweepingDelete = GetSubHash( "_System_GC_free_for_SweepingDelete",1 ) )
    241         pSub_System_GC_free_for_SweepingDelete->bUse = 1;
     241        pSub_System_GC_free_for_SweepingDelete->Using();
    242242
    243243    pSub_allrem=GetSubHash("_allrem");
    244     pSub_allrem->bUse=1;
    245     pSub_allrem->bSystem=1;
     244    pSub_allrem->Using();
     245    pSub_allrem->ThisIsSystemProc();
    246246
    247247    pSub_aullrem=GetSubHash("_aullrem");
    248     pSub_aullrem->bUse=1;
    249     pSub_aullrem->bSystem=1;
     248    pSub_aullrem->Using();
     249    pSub_aullrem->ThisIsSystemProc();
    250250
    251251    pSub_allmul=GetSubHash("_allmul");
    252     pSub_allmul->bUse=1;
    253     pSub_allmul->bSystem=1;
     252    pSub_allmul->Using();
     253    pSub_allmul->ThisIsSystemProc();
    254254
    255255    pSub_alldiv=GetSubHash("_alldiv");
    256     pSub_alldiv->bUse=1;
    257     pSub_alldiv->bSystem=1;
     256    pSub_alldiv->Using();
     257    pSub_alldiv->ThisIsSystemProc();
    258258
    259259    pSub_aulldiv=GetSubHash("_aulldiv");
    260     pSub_aulldiv->bUse=1;
    261     pSub_aulldiv->bSystem=1;
     260    pSub_aulldiv->Using();
     261    pSub_aulldiv->ThisIsSystemProc();
    262262
    263263    pSub_allshl=GetSubHash("_allshl");
    264     pSub_allshl->bUse=1;
    265     pSub_allshl->bSystem=1;
     264    pSub_allshl->Using();
     265    pSub_allshl->ThisIsSystemProc();
    266266
    267267    pSub_allshr=GetSubHash("_allshr");
    268     pSub_allshr->bUse=1;
    269     pSub_allshr->bSystem=1;
     268    pSub_allshr->Using();
     269    pSub_allshr->ThisIsSystemProc();
    270270
    271271    pSub_aullshr=GetSubHash("_aullshr");
    272     pSub_aullshr->bUse=1;
    273     pSub_aullshr->bSystem=1;
     272    pSub_aullshr->Using();
     273    pSub_aullshr->ThisIsSystemProc();
    274274
    275275    pSub_esp_error=GetSubHash("_esp_error");
    276     pSub_esp_error->bUse=1;
     276    pSub_esp_error->Using();
    277277
    278278
     
    391391
    392392        //call _System_Call_Destructor_of_GlobalObject
    393         extern SubInfo *pSub_System_Call_Destructor_of_GlobalObject;
     393        extern UserProc *pSub_System_Call_Destructor_of_GlobalObject;
    394394        op_call(pSub_System_Call_Destructor_of_GlobalObject);
    395395
     
    425425    for(i=0;i<SynonymErrorNum;i++) HeapDefaultFree(SynonymErrorWords[i]);
    426426    HeapDefaultFree(SynonymErrorWords);
     427    SynonymErrorWords=0;
    427428
    428429
     
    451452    ////////////////////////////////
    452453    for(i=0;i<MAX_HASH;i++){
    453         extern DECLAREINFO **ppDeclareHash;
    454         DECLAREINFO *pdi;
    455         pdi=ppDeclareHash[i];
    456         while(pdi){
    457             if(pdi->bUse==0){
    458                 pdi=pdi->pNextData;
     454        extern DllProc **ppDeclareHash;
     455        const DllProc *pDllProc = ppDeclareHash[i];
     456        while(pDllProc){
     457            if( !pDllProc->IsUsing() ){
     458                pDllProc=pDllProc->pNextData;
    459459                continue;
    460460            }
     
    462462            //エラーチェック
    463463            HINSTANCE hLib;
    464             hLib=LoadLibrary(pdi->file);
     464            hLib=LoadLibrary( pDllProc->GetDllFileName().c_str() );
    465465            if(!hLib){
    466466                extern char OutputFileName[MAX_PATH];
     
    468468                _splitpath(OutputFileName,temp2,temp3,NULL,NULL);
    469469                lstrcat(temp2,temp3);
    470                 lstrcpy(temp3,pdi->file);
     470                lstrcpy(temp3,pDllProc->GetDllFileName().c_str());
    471471                GetFullPath(temp3,temp2);
    472472                hLib=LoadLibrary(temp3);
    473473
    474474                if(!hLib){
    475                     SetError(-106,pdi->file,pdi->pos);
     475                    SetError(-106,pDllProc->GetDllFileName().c_str(),pDllProc->GetCodePos());
    476476                }
    477477            }
    478478
    479479            if(hLib){
    480                 if(!GetProcAddress(hLib,pdi->alias)){
     480                if(!GetProcAddress(hLib,pDllProc->GetAlias().c_str())){
    481481                    FreeLibrary(hLib);
    482                     SetError(-107,pdi->alias,pdi->pos);
     482                    SetError(-107,pDllProc->GetAlias(),pDllProc->GetCodePos());
    483483                }
    484484                FreeLibrary(hLib);
    485485            }
    486486
    487             pdi=pdi->pNextData;
     487            pDllProc=pDllProc->pNextData;
    488488        }
    489489    }
     
    522522        ExportNamesLength=lstrlen(lpExportNames)+1;
    523523
    524         extern SubInfo **ppSubHash;
    525         SubInfo *psi,*psi2;
     524        extern UserProc **ppSubHash;
     525        UserProc *pUserProc,*psi2;
    526526        while(1){
    527527            //辞書順にサーチ
    528528            temporary[0]=0;
    529529            for(i=0,psi2=0;i<MAX_HASH;i++){
    530                 psi=ppSubHash[i];
    531                 while(psi){
    532                     if(psi->bExport){
     530                pUserProc=ppSubHash[i];
     531                while(pUserProc){
     532                    if(pUserProc->IsExport()){
    533533                        if(temporary[0]=='\0'){
    534                             lstrcpy(temporary,psi->name);
    535                             psi2=psi;
     534                            lstrcpy(temporary,pUserProc->GetName().c_str());
     535                            psi2=pUserProc;
    536536                        }
    537537                        else{
    538538                            i3=lstrlen(temporary);
    539                             i4=lstrlen(psi->name);
     539                            i4=(int)pUserProc->GetName().size();
    540540                            if(i3<i4) i3=i4;
    541                             if(memcmp(temporary,psi->name,i3)>0){
    542                                 lstrcpy(temporary,psi->name);
    543                                 psi2=psi;
     541                            if(memcmp(temporary,pUserProc->GetName().c_str(),i3)>0){
     542                                lstrcpy(temporary,pUserProc->GetName().c_str());
     543                                psi2=pUserProc;
    544544                            }
    545545                        }
    546546                    }
    547                     psi=psi->pNextData;
     547                    pUserProc=pUserProc->pNextData;
    548548                }
    549549            }
    550550            if(psi2==0) break;
    551             psi=psi2;
    552 
    553             psi->bExport=0;
    554 
    555             if(lstrcmpi(psi->name,"DllMain")==0)
    556                 DllMain_EntryPoint=psi->CompileAddress;
     551            pUserProc=psi2;
     552
     553            pUserProc->ExportOff();
     554
     555            if( pUserProc->GetName() == "DllMain" ){
     556                DllMain_EntryPoint=pUserProc->beginOpAddress;
     557            }
    557558
    558559            lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
    559             lpdwExportAddressTable[ExportNum]=psi->CompileAddress;
     560            lpdwExportAddressTable[ExportNum]=pUserProc->beginOpAddress;
    560561
    561562            lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
     
    565566            lpwExportOrdinalTable[ExportNum]=ExportNum;
    566567
    567             lstrcpy(lpExportNames+ExportNamesLength,psi->name);
     568            lstrcpy(lpExportNames+ExportNamesLength,pUserProc->GetName().c_str());
    568569            ExportNamesLength+=lstrlen(lpExportNames+ExportNamesLength)+1;
    569570
     
    598599    //インポートDLL情報
    599600    /////////////////////
    600     extern DECLAREINFO **ppDeclareHash;
    601     DECLAREINFO *pdi;
     601    extern DllProc **ppDeclareHash;
    602602    char **ppDllNames;
    603603    int ImportDllNum;
     
    621621    ImportDllNum=0;
    622622    for(i=0;i<MAX_HASH;i++){
    623         pdi=ppDeclareHash[i];
    624         while(pdi){
    625             if(pdi->dwType==DECLARE_STATIC||
    626                 pdi->bUse==0){
    627                 pdi=pdi->pNextData;
     623        const DllProc *pDllProc=ppDeclareHash[i];
     624        while(pDllProc){
     625            if( !pDllProc->IsUsing() ){
     626                pDllProc=pDllProc->pNextData;
    628627                continue;
    629628            }
    630629
    631             if(lstrlen(pdi->file)>16){
     630            if( pDllProc->GetDllFileName().size() > 16 ){
    632631                SetError(7,NULL,cp);
    633632                break;
    634633            }
    635634            for(i2=0;i2<ImportDllNum;i2++){
    636                 if(lstrcmp(ppDllNames[i2],pdi->file)==0) break;
     635                if( pDllProc->GetDllFileName() == ppDllNames[i2] ){
     636                    break;
     637                }
    637638            }
    638639            if(i2==ImportDllNum){
    639640                ppDllNames=(char **)HeapReAlloc(hHeap,0,ppDllNames,(ImportDllNum+1)*sizeof(char **));
    640641                ppDllNames[ImportDllNum]=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,16);
    641                 lstrcpy(ppDllNames[ImportDllNum],pdi->file);
     642                lstrcpy(ppDllNames[ImportDllNum],pDllProc->GetDllFileName().c_str());
    642643                ImportDllNum++;
    643644            }
    644645
    645             pdi=pdi->pNextData;
     646            pDllProc=pDllProc->pNextData;
    646647        }
    647648    }
     
    660661        pImportTable[i].Name=i3+i*0x10;
    661662        for(i2=0;i2<MAX_HASH;i2++){
    662             pdi=ppDeclareHash[i2];
    663             while(pdi){
    664                 if(pdi->dwType==DECLARE_STATIC||
    665                     pdi->bUse==0){
    666                     pdi=pdi->pNextData;
     663            const DllProc *pDllProc=ppDeclareHash[i2];
     664            while(pDllProc){
     665                if( !pDllProc->IsUsing() ){
     666                    pDllProc=pDllProc->pNextData;
    667667                    continue;
    668668                }
    669669
    670                 if(lstrcmp(ppDllNames[i],pdi->file)==0){
     670                if( pDllProc->GetDllFileName() == ppDllNames[i] ){
    671671                    //ルックアップデータのサイズを追加
    672672                    LookupSize+=sizeof(DWORD);
    673673                }
    674674
    675                 pdi=pdi->pNextData;
     675                pDllProc=pDllProc->pNextData;
    676676            }
    677677        }
     
    691691    for(i=0,i5=0;i<ImportDllNum;i++){
    692692        for(i2=0;i2<MAX_HASH;i2++){
    693             pdi=ppDeclareHash[i2];
    694             while(pdi){
    695                 if(pdi->dwType==DECLARE_STATIC||
    696                     pdi->bUse==0){
    697                     pdi=pdi->pNextData;
     693            DllProc *pDllProc=ppDeclareHash[i2];
     694            while(pDllProc){
     695                if( !pDllProc->IsUsing() ){
     696                    pDllProc=pDllProc->pNextData;
    698697                    continue;
    699698                }
    700699
    701                 if(lstrcmp(ppDllNames[i],pdi->file)==0){
     700                if( pDllProc->GetDllFileName() == ppDllNames[i] ){
    702701                    //ルックアップの位置をセット(後にインポート アドレス テーブルにセットしなおされる)
    703                     pdi->LookupAddress=i3+(i5*sizeof(DWORD));
     702                    pDllProc->SetLookupAddress( i3+(i5*sizeof(DWORD)) );
    704703
    705704                    //ルックアップ テーブル
     
    709708                    pHintTable[HintSize++]=0;
    710709                    pHintTable[HintSize++]=0;
    711                     lstrcpy(pHintTable+HintSize,pdi->alias);
    712                     i4=lstrlen(pdi->alias);
     710                    lstrcpy(pHintTable+HintSize,pDllProc->GetAlias().c_str());
     711                    i4=(int)pDllProc->GetAlias().size();
    713712                    HintSize+=i4+1;
    714713                    if(i4%2==0) pHintTable[HintSize++]=0;
     
    720719                }
    721720
    722                 pdi=pdi->pNextData;
     721                pDllProc=pDllProc->pNextData;
    723722            }
    724723        }
     
    993992
    994993        for(i2=0;i2<MAX_HASH;i2++){
    995             pdi=ppDeclareHash[i2];
    996             while(pdi){
    997                 if(pdi->bUse==0){
    998                     pdi=pdi->pNextData;
     994            const DllProc *pDllProc=ppDeclareHash[i2];
     995            while(pDllProc){
     996                if( !pDllProc->IsUsing() ){
     997                    pDllProc=pDllProc->pNextData;
    999998                    continue;
    1000999                }
    10011000
    1002                 if(lstrcmp(ppDllNames[i],pdi->file)==0){
     1001                if( pDllProc->GetDllFileName() == ppDllNames[i] ){
    10031002                    //ルックアップ テーブル
    10041003                    pLookupTable[i5++]+=MemPos_ImportSection;
    10051004                }
    10061005
    1007                 pdi=pdi->pNextData;
     1006                pDllProc=pDllProc->pNextData;
    10081007            }
    10091008        }
     
    10281027    // インポートテーブルスケジュール(インポート アドレス テーブルを指し示させる)
    10291028    for(i=0;i<pobj_ImportAddrSchedule->num;i++){
    1030         DECLAREINFO *pdi;
    1031         pdi=pobj_ImportAddrSchedule->ppdi[i];
     1029        const DllProc *pDllProc=pobj_ImportAddrSchedule->ppdi[i];
    10321030        *((long *)(OpBuffer+pobj_ImportAddrSchedule->pObpValues[i]))=
    10331031            ImageBase+
     
    10351033            LookupSize+         //ルックアップテーブル
    10361034            HintSize+           //ヒント名(関数名)テーブル
    1037             pdi->LookupAddress;
     1035            pDllProc->GetLookupAddress();
    10381036    }
    10391037    delete pobj_ImportAddrSchedule;
     
    10431041    // プロシージャポインタスケジュール
    10441042    for(i=0;i<pobj_SubAddrSchedule->num;i++){
    1045         if(pobj_SubAddrSchedule->ppsi[i]->CompileAddress==0
    1046             &&pobj_SubAddrSchedule->ppsi[i]->EndOpAddr==0){
     1043        if(pobj_SubAddrSchedule->ppsi[i]->beginOpAddress==0
     1044            &&pobj_SubAddrSchedule->ppsi[i]->endOpAddress==0){
    10471045            SetError(300,NULL,-1);
    10481046        }
     
    10501048        if(pobj_SubAddrSchedule->pbCall[i]){
    10511049            *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1052                 pobj_SubAddrSchedule->ppsi[i]->CompileAddress-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
     1050                pobj_SubAddrSchedule->ppsi[i]->beginOpAddress-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
    10531051        }
    10541052        else{
    10551053            *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1056                 pobj_SubAddrSchedule->ppsi[i]->CompileAddress+ImageBase+MemPos_CodeSection;
     1054                pobj_SubAddrSchedule->ppsi[i]->beginOpAddress+ImageBase+MemPos_CodeSection;
    10571055        }
    10581056    }
Note: See TracChangeset for help on using the changeset viewer.