Changeset 281 for trunk/src/pe2lx/pe.cpp


Ignore:
Timestamp:
Jul 7, 1999, 10:11:58 AM (26 years ago)
Author:
sandervl
Message:

Major changes in PE2LX/KERNEL32 for TLS support. DLL VERSION INCREASED TO 3 AS THIS CHANGE MAKES IT INCOMPATIBLE WITH APPS CONVERTED WITH PREVIOUS VERSION OF PE2LX (OR WIN32K)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/pe2lx/pe.cpp

    r275 r281  
    1 /* $Id: pe.cpp,v 1.5 1999-07-06 08:50:11 sandervl Exp $ */
     1/* $Id: pe.cpp,v 1.6 1999-07-07 08:11:11 sandervl Exp $ */
    22
    33/*
     
    230230  else  OS2Exe.SetModuleName(os2file);
    231231
     232  OS2Exe.SetEntryPoint(oh.AddressOfEntryPoint+oh.ImageBase);
     233
    232234  nSections = NR_SECTIONS(win32file);
    233235
     
    276278                        continue;
    277279                }
     280                if(strcmp(psh[i].Name, ".tls") == 0)
     281                {
     282                  IMAGE_TLS_DIRECTORY *tlsDir;
     283
     284                        tlsDir = (IMAGE_TLS_DIRECTORY *)ImageDirectoryOffset(win32file, IMAGE_DIRECTORY_ENTRY_TLS);
     285                        if(tlsDir) {
     286                                cout << "TLS Directory" << endl;
     287                                cout << "TLS Address of Index     " << hex((ULONG)tlsDir->AddressOfIndex) << endl;
     288                                cout << "TLS Address of Callbacks " << hex((ULONG)tlsDir->AddressOfCallBacks) << endl;
     289                                cout << "TLS SizeOfZeroFill       " << hex(tlsDir->SizeOfZeroFill) << endl;
     290                                cout << "TLS Characteristics      " << hex(tlsDir->Characteristics) << endl;
     291                                OS2Exe.SetTLSAddress(tlsDir->StartAddressOfRawData);
     292                                OS2Exe.SetTLSIndexAddress((ULONG)tlsDir->AddressOfIndex);
     293                                OS2Exe.SetTLSInitSize(tlsDir->EndAddressOfRawData - tlsDir->StartAddressOfRawData);
     294                                OS2Exe.SetTLSTotalSize(tlsDir->EndAddressOfRawData - tlsDir->StartAddressOfRawData + tlsDir->SizeOfZeroFill);
     295                                OS2Exe.SetTLSCallBackAddr((ULONG)tlsDir->AddressOfCallBacks);
     296                        }
     297                }
    278298
    279299                if ((psh[i].Characteristics & IMAGE_SCN_CNT_CODE)
     
    287307                                OS2Exe.SetEntryAddress(oh.AddressOfEntryPoint - oh.BaseOfCode);
    288308                        else    OS2Exe.SetEntryAddress(oh.AddressOfEntryPoint-psh[i].VirtualAddress);
     309
    289310                        OS2Exe.StoreSection((char *)win32file+psh[i].PointerToRawData,
    290311                                            psh[i].SizeOfRawData, psh[i].Misc.VirtualSize,
     
    332353  prel = (PIMAGE_BASE_RELOCATION) ImageDirectoryOffset (win32file, IMAGE_DIRECTORY_ENTRY_BASERELOC);
    333354  OS2Exe.SetNrOff32Fixups((prel) ? oh.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size/2 : 0);
     355
     356  //SvL: Add EntryPoint & TLS fixups (if required)
     357  OS2Exe.AddExtraFixups();
    334358
    335359  if(prel) {
Note: See TracChangeset for help on using the changeset viewer.