void loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors); void ImageImportDescriptor::loadImageImportThunk(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors) { ImageSectionHeader imageSectionHeader; imageThunkImportOrdinals.remove(); imageThunkImportNames.remove(); pureView.push(); pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { ImageThunkData imageThunkData; imageThunkData< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView) { DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); ImageImportDescriptor imageImportDescriptor; ImageSectionHeader importNamesSectionHeader; ImageSectionHeader exportSectionHeader; DWORD deltaOffset; DWORD deltaNames; imageImportDescriptors.remove(); imageExportDescriptors.size(0); if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader,deltaOffset))return FALSE; pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { String moduleName; imageImportDescriptor< &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView); // ::sprintf(entryPointString,"&0x%08lx",(DWORD)((PureVector&)*this)[functionIndex].imageExportEntryPoint()); void replaceImageImportOrdinals(Block &imageImportDescriptors,PureViewOfFile &pureView); void PEHeader::replaceImageImportOrdinals(Block &imageImportDescriptors,PureViewOfFile &pureView) { ImageExportDescriptors imageExportDescriptors; ImageExportDescriptor imageExportDescriptor; ImageSectionHeader exportSectionHeader; DWORD itemCount; DWORD importModuleCount; DWORD exportIndex; if(!(importModuleCount=imageImportDescriptors.size()))return; loadImageExportDescriptors(imageExportDescriptors,exportSectionHeader,pureView); for(short importModuleIndex=0;importModuleIndex&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportName(exportNames[nameIndex]); // ((PureVector&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportOrdinal(exportOrdinals[nameIndex]); WORD PEHeader::enclosingSectionHeader(DWORD virtualAddress,ImageSectionHeader &someImageSectionHeader,DWORD &deltaOffset) { DWORD sectionCount(((PureVector&)*this).size()); for(short sectionIndex=0;sectionIndex&)*this)[sectionIndex]); if(virtualAddress>=imageSectionHeader.virtualAddress()&& virtualAddress &imageImportDescriptors,ImageSectionHeader &importSectionHeader,PureViewOfFile &pureView) { DirectoryEntryKey sectionKey(DirectoryEntryKey::ImportDirectory); ImageDataDirectory imageSectionDirectory(((ImageOptionalHeader&)*this)[sectionKey]); ImageImportDescriptor imageImportDescriptor; DWORD deltaOffset; DWORD deltaNames; imageImportDescriptors.remove(); if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),importSectionHeader))return FALSE; deltaOffset=importSectionHeader.virtualAddress()-importSectionHeader.pointerRawData(); pureView.seek(imageSectionDirectory.virtualAddress()-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { String moduleName; imageImportDescriptor< &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView); void PEHeader::loadImageImportThunks(DWORD virtualAddress,DWORD deltaOffset,Block &imageThunkImportOrdinals,Block &imageThunkImportNames,PureViewOfFile &pureView) { imageThunkImportOrdinals.remove(); imageThunkImportNames.remove(); pureView.push(); pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { ImageThunkData imageThunkData; imageThunkData< imageOriginalThunkImportOrdinals; // Block imageOriginalThunkImportNames; // if(imageImportDescriptor.originalFirstThunkRVA()) // loadImageImportThunks(imageImportDescriptor.originalFirstThunkRVA(),deltaOffset, // imageOriginalThunkImportOrdinals,imageOriginalThunkImportNames,pureView); // Block imageThunkImportOrdinals; // Block imageThunkImportNames; // if(imageImportDescriptor.firstThunkRVA()) // loadImageImportThunks(imageImportDescriptor.firstThunkRVA(),deltaOffset, // imageThunkImportOrdinals,imageThunkImportNames,pureView); pureView.push(); if(imageImportDescriptor.originalFirstThunkRVA()) { pureView.seek(imageImportDescriptor.originalFirstThunkRVA()-deltaOffset,PureViewOfFile::SeekSet); while(TRUE) { ImageThunkData imageThunkData; imageThunkData< //#endif //#ifndef _COMMON_BLOCK_TPP_ //#include //#endif #if 0 // Block > mResStrings; mResStrings.insert(&SmartPointer("???_0")); mResStrings.insert(&SmartPointer("CURSOR")); mResStrings.insert(&SmartPointer("BITMAP")); mResStrings.insert(&SmartPointer("ICON")); mResStrings.insert(&SmartPointer("MENU")); mResStrings.insert(&SmartPointer("DIALOG")); mResStrings.insert(&SmartPointer("STRING")); mResStrings.insert(&SmartPointer("FONTDIR")); mResStrings.insert(&SmartPointer("FONT")); mResStrings.insert(&SmartPointer("ACCELERATORS")); mResStrings.insert(&SmartPointer("RCDATA")); mResStrings.insert(&SmartPointer("MESSAGETABLE")); mResStrings.insert(&SmartPointer("GROUP_CURSOR")); mResStrings.insert(&SmartPointer("???_13")); mResStrings.insert(&SmartPointer("GROUP_ICON")); mResStrings.insert(&SmartPointer("???_15")); mResStrings.insert(&SmartPointer("VERSION")); for(short itemIndex=0;itemIndex