Initial
This commit is contained in:
495
image/SCRAPS.TXT
Normal file
495
image/SCRAPS.TXT
Normal file
@@ -0,0 +1,495 @@
|
||||
void loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors);
|
||||
|
||||
|
||||
void ImageImportDescriptor::loadImageImportThunk(DWORD virtualAddress,DWORD deltaOffset,Block<ImageThunkData> &imageThunkImportOrdinals,Block<ImageThunkName> &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<<pureView;
|
||||
if(!imageThunkData.isOkay())break;
|
||||
if(imageThunkData.isOrdinalImport())
|
||||
{
|
||||
ImageExportDescriptor imageExportDescriptor;
|
||||
ImageThunkName imageThunkName;
|
||||
DWORD exportIndex;
|
||||
if(imageExportDescriptors.locateImageExportOrdinal(imageThunkData.ordinal(),imageExportDescriptor,exportIndex))
|
||||
{
|
||||
imageThunkName.importName(imageExportDescriptor.imageExportName());
|
||||
imageThunkImportNames.insert(&imageThunkName);
|
||||
}
|
||||
else imageThunkImportOrdinals.insert(&imageThunkData);
|
||||
}
|
||||
else
|
||||
{
|
||||
ImageThunkName imageThunkName;
|
||||
pureView.push();
|
||||
imageSectionHeaders.enclosingSectionHeader(imageThunkData.addressOfDataRVA(),imageSectionHeader,deltaOffset);
|
||||
pureView.seek(imageThunkData.addressOfDataRVA()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
imageThunkName<<pureView;
|
||||
imageThunkImportNames.insert(&imageThunkName);
|
||||
pureView.pop();
|
||||
}
|
||||
}
|
||||
pureView.pop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ImageImportDescriptor::loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,ImageExportDescriptors &imageExportDescriptors)
|
||||
{
|
||||
if(!isOkay())return;
|
||||
if(!firstThunkRVA()&&!originalFirstThunkRVA())return;
|
||||
if(originalFirstThunkRVA())loadImageImportThunk(originalFirstThunkRVA(),deltaOffset,
|
||||
imageOriginalThunkImportOrdinals(),imageOriginalThunkImportNames(),pureView,imageSectionHeaders,imageExportDescriptors);
|
||||
else if(firstThunkRVA())loadImageImportThunk(firstThunkRVA(),deltaOffset,
|
||||
imageThunkImportOrdinals(),imageThunkImportNames(),pureView,imageSectionHeaders,imageExportDescriptors);
|
||||
}
|
||||
|
||||
|
||||
WORD PEHeader::loadImageImportDescriptors(Block<ImageImportDescriptor> &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<<pureView;
|
||||
if(!imageImportDescriptor.isOkay())break;
|
||||
enclosingSectionHeader(imageImportDescriptor.nameRVA(),importNamesSectionHeader,deltaNames);
|
||||
pureView.push();
|
||||
pureView.seek(imageImportDescriptor.nameRVA()-deltaNames,PureViewOfFile::SeekSet);
|
||||
pureView.getLine(moduleName);
|
||||
loadImageExportDescriptors(imageExportDescriptors,exportSectionHeader,moduleName);
|
||||
imageImportDescriptor.moduleName(moduleName);
|
||||
pureView.pop();
|
||||
imageImportDescriptor.loadImageImportThunks(deltaOffset,pureView,(ImageSectionHeaders&)*this,imageExportDescriptors);
|
||||
imageImportDescriptors.insert(&imageImportDescriptor);
|
||||
}
|
||||
return imageImportDescriptors.size();
|
||||
}
|
||||
|
||||
|
||||
WORD loadImageImportDescriptors(Block<ImageImportDescriptor> &imageImportDescriptors,ImageSectionHeader &importSectionHeader,ImageExportDescriptors &imageExportDescriptors,PureViewOfFile &pureView);
|
||||
|
||||
// ::sprintf(entryPointString,"&0x%08lx",(DWORD)((PureVector<ImageExportDescriptor>&)*this)[functionIndex].imageExportEntryPoint());
|
||||
|
||||
void replaceImageImportOrdinals(Block<ImageImportDescriptor> &imageImportDescriptors,PureViewOfFile &pureView);
|
||||
void PEHeader::replaceImageImportOrdinals(Block<ImageImportDescriptor> &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<importModuleCount;importModuleIndex++)
|
||||
{
|
||||
ImageImportDescriptor &imageImportDescriptor(imageImportDescriptors[importModuleIndex]);
|
||||
itemCount=imageImportDescriptor.imageOriginalThunkImportOrdinals().size();
|
||||
for(DWORD itemIndex=0;itemIndex<itemCount;itemIndex++)
|
||||
{
|
||||
ImageImportDescriptorExpand::ImageThunkDataBlock &imageThunkDataBlock(imageImportDescriptor.imageOriginalThunkImportOrdinals());
|
||||
if(imageExportDescriptors.locateImageExportOrdinal(imageThunkDataBlock[itemIndex].ordinal(),imageExportDescriptor,exportIndex))
|
||||
{
|
||||
imageImportDescriptor.imageOriginalThunkImportNames().insert
|
||||
}
|
||||
}
|
||||
itemCount=imageImportDescriptor.imageThunkImportOrdinals().size();
|
||||
for(itemIndex=0;itemIndex<itemCount;itemIndex++)
|
||||
{
|
||||
ImageImportDescriptorExpand::ImageThunkDataBlock &imageThunkDataBlock(imageImportDescriptor.imageThunkImportOrdinals());
|
||||
if(imageExportDescriptors.locateImageExportOrdinal(imageThunkDataBlock[itemIndex].ordinal(),imageExportDescriptor,exportIndex))
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ((PureVector<ImageExportDescriptor>&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportName(exportNames[nameIndex]);
|
||||
// ((PureVector<ImageExportDescriptor>&)*this)[(WORD)exportOrdinals[nameIndex]-1].imageExportOrdinal(exportOrdinals[nameIndex]);
|
||||
|
||||
WORD PEHeader::enclosingSectionHeader(DWORD virtualAddress,ImageSectionHeader &someImageSectionHeader,DWORD &deltaOffset)
|
||||
{
|
||||
DWORD sectionCount(((PureVector<ImageSectionHeader>&)*this).size());
|
||||
|
||||
for(short sectionIndex=0;sectionIndex<sectionCount;sectionIndex++)
|
||||
{
|
||||
ImageSectionHeader &imageSectionHeader(((PureVector<ImageSectionHeader>&)*this)[sectionIndex]);
|
||||
if(virtualAddress>=imageSectionHeader.virtualAddress()&&
|
||||
virtualAddress<imageSectionHeader.virtualAddress()+imageSectionHeader.virtualSize())
|
||||
{
|
||||
someImageSectionHeader=imageSectionHeader;
|
||||
deltaOffset=imageSectionHeader.virtualAddress()-imageSectionHeader.pointerRawData();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
WORD PEHeader::loadImageImportDescriptors(Block<ImageImportDescriptor> &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<<pureView;
|
||||
if(!imageImportDescriptor.isOkay())break;
|
||||
deltaOffset=importNamesSectionHeader.virtualAddress()-importNamesSectionHeader.pointerRawData();
|
||||
pureView.push();
|
||||
pureView.seek(imageImportDescriptor.nameRVA()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
pureView.getLine(moduleName);
|
||||
imageImportDescriptor.moduleName(moduleName);
|
||||
pureView.pop();
|
||||
imageImportDescriptor.loadImageImportThunks(deltaOffset,pureView);
|
||||
imageImportDescriptors.insert(&imageImportDescriptor);
|
||||
}
|
||||
return imageImportDescriptors.size();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(originalFirstThunkRVA())loadImageImportThunk(originalFirstThunkRVA(),deltaOffset,
|
||||
imageOriginalThunkImportOrdinals(),imageOriginalThunkImportNames(),pureView);
|
||||
|
||||
|
||||
void loadImageImportThunks(DWORD virtualAddress,DWORD deltaOffset,Block<ImageThunkData> &imageThunkImportOrdinals,Block<ImageThunkName> &imageThunkImportNames,PureViewOfFile &pureView);
|
||||
|
||||
|
||||
|
||||
void PEHeader::loadImageImportThunks(DWORD virtualAddress,DWORD deltaOffset,Block<ImageThunkData> &imageThunkImportOrdinals,Block<ImageThunkName> &imageThunkImportNames,PureViewOfFile &pureView)
|
||||
{
|
||||
imageThunkImportOrdinals.remove();
|
||||
imageThunkImportNames.remove();
|
||||
pureView.push();
|
||||
pureView.seek(virtualAddress-deltaOffset,PureViewOfFile::SeekSet);
|
||||
while(TRUE)
|
||||
{
|
||||
ImageThunkData imageThunkData;
|
||||
imageThunkData<<pureView;
|
||||
if(!imageThunkData.isOkay())break;
|
||||
if(imageThunkData.isOrdinalImport())imageThunkImportOrdinals.insert(&imageThunkData);
|
||||
else
|
||||
{
|
||||
ImageThunkName imageThunkName;
|
||||
pureView.push();
|
||||
pureView.seek(imageThunkData.addressOfDataRVA()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
imageThunkName<<pureView;
|
||||
imageThunkImportNames.insert(&imageThunkName);
|
||||
pureView.pop();
|
||||
}
|
||||
}
|
||||
pureView.pop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Block<ImageThunkData> imageOriginalThunkImportOrdinals;
|
||||
// Block<ImageThunkName> imageOriginalThunkImportNames;
|
||||
// if(imageImportDescriptor.originalFirstThunkRVA())
|
||||
// loadImageImportThunks(imageImportDescriptor.originalFirstThunkRVA(),deltaOffset,
|
||||
// imageOriginalThunkImportOrdinals,imageOriginalThunkImportNames,pureView);
|
||||
|
||||
// Block<ImageThunkData> imageThunkImportOrdinals;
|
||||
// Block<ImageThunkName> 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<<pureView;
|
||||
if(!imageThunkData.isOkay())break;
|
||||
}
|
||||
}
|
||||
pureView.pop();
|
||||
|
||||
#if 0
|
||||
pureView.push();
|
||||
if(imageImportDescriptor.firstThunkRVA())
|
||||
{
|
||||
pureView.seek(imageImportDescriptor.firstThunkRVA()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
while(TRUE)
|
||||
{
|
||||
ImageThunkData imageThunkData;
|
||||
imageThunkData<<pureView;
|
||||
if(!imageThunkData.isOkay())break;
|
||||
if(imageThunkData.isOrdinalImport())
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
ImageThunkName imageThunkName;
|
||||
pureView.push();
|
||||
pureView.seek(imageThunkData.addressOfDataRVA()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
imageThunkName<<pureView;
|
||||
pureView.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
pureView.pop();
|
||||
#endif
|
||||
|
||||
|
||||
// ImageThunkName imageThunkName;
|
||||
// imageThunkName<<pureView;
|
||||
// break;
|
||||
// pureView.seek(imageImportDescriptor.nameRVA()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
// char *lpString((char*)(imageImportDescriptor.nameRVA()-deltaOffset+pureView.base()));
|
||||
// if(!lpString)return;
|
||||
|
||||
|
||||
// pureView.seek(deltaOffset-imageImportDescriptor.nameRVA(),PureViewOfFile::SeekSet);
|
||||
// char *lpString((char*)(imageImportDescriptor.nameRVA()-deltaOffset+pureView.base()));
|
||||
// if(!lpString)return;
|
||||
// lpString=0;
|
||||
|
||||
|
||||
|
||||
Bitmap kcBitmap("C:\\WORK\\SCENE\\MEDIA\\BMP\\KC.BMP");
|
||||
HWND hDisplayWnd;
|
||||
|
||||
hDisplayWnd=::CreateWindow("BUTTON","",WS_VISIBLE,0,0,100,100,(HWND)0,(HMENU)0,hInstance,(LPVOID)0);
|
||||
if(!hDisplayWnd)return FALSE;
|
||||
::ShowWindow(hDisplayWnd,SW_SHOW);
|
||||
::UpdateWindow(hDisplayWnd);
|
||||
kcBitmap.displayBitmap(hDisplayWnd);
|
||||
::Sleep(10000);
|
||||
::DestroyWindow(hDisplayWnd);
|
||||
|
||||
|
||||
|
||||
|
||||
// DisAssembler disAssembler;
|
||||
// disAssembler.pageBreak(FALSE);
|
||||
// disAssembler.disassemble("C:\\COMMAND.COM");
|
||||
// winConsole.writeLine("Finished, press any key.");
|
||||
// winConsole.read();
|
||||
|
||||
//#ifndef _COMMON_PUREVIEWOFFILE_HPP_
|
||||
//#include <common/pview.hpp>
|
||||
//#endif
|
||||
//#ifndef _COMMON_BLOCK_TPP_
|
||||
//#include <common/block.tpp>
|
||||
//#endif
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
// Block<SmartPointer<char> > mResStrings;
|
||||
|
||||
mResStrings.insert(&SmartPointer<char>("???_0"));
|
||||
mResStrings.insert(&SmartPointer<char>("CURSOR"));
|
||||
mResStrings.insert(&SmartPointer<char>("BITMAP"));
|
||||
mResStrings.insert(&SmartPointer<char>("ICON"));
|
||||
mResStrings.insert(&SmartPointer<char>("MENU"));
|
||||
mResStrings.insert(&SmartPointer<char>("DIALOG"));
|
||||
mResStrings.insert(&SmartPointer<char>("STRING"));
|
||||
mResStrings.insert(&SmartPointer<char>("FONTDIR"));
|
||||
mResStrings.insert(&SmartPointer<char>("FONT"));
|
||||
mResStrings.insert(&SmartPointer<char>("ACCELERATORS"));
|
||||
mResStrings.insert(&SmartPointer<char>("RCDATA"));
|
||||
mResStrings.insert(&SmartPointer<char>("MESSAGETABLE"));
|
||||
mResStrings.insert(&SmartPointer<char>("GROUP_CURSOR"));
|
||||
mResStrings.insert(&SmartPointer<char>("???_13"));
|
||||
mResStrings.insert(&SmartPointer<char>("GROUP_ICON"));
|
||||
mResStrings.insert(&SmartPointer<char>("???_15"));
|
||||
mResStrings.insert(&SmartPointer<char>("VERSION"));
|
||||
for(short itemIndex=0;itemIndex<mResStrings.size();itemIndex++)
|
||||
mResStrings[itemIndex].disposition(PointerDisposition::Assume);
|
||||
#endif
|
||||
|
||||
|
||||
// imgResDir.read(imageSectionHeader.pointerRawData(),pureView);
|
||||
// pureView.seek(imageSectionHeader.pointerRawData(),PureViewOfFile::SeekSet);
|
||||
// sectionData.size(imageSectionHeader.sizeofRawData());
|
||||
// imgResDir.read(imageSectionHeader.pointerRawData(),pureView);
|
||||
// descendResourceDirectory(imgResDir);
|
||||
|
||||
|
||||
void ImageResourceDataEntry::read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView)
|
||||
{
|
||||
pureView.push();
|
||||
pureView.read((char*)&((IMAGE_RESOURCE_DATA_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DATA_ENTRY));
|
||||
mRawData.size(size());
|
||||
pureView.seek(offsetData()-deltaOffset,PureViewOfFile::SeekSet);
|
||||
pureView.read((char*)((BYTE*)mRawData),mRawData.size());
|
||||
// FileHandle resFile("RES.DAT",FileHandle::Write,FileHandle::ShareNone,FileHandle::Overwrite);
|
||||
// resFile.write((BYTE*)mRawData,mRawData.size());
|
||||
pureView.pop();
|
||||
}
|
||||
|
||||
|
||||
void ImageResourceDirectoryEntry::read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView)
|
||||
{
|
||||
pureView.read((char*)&((IMAGE_RESOURCE_DIRECTORY_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
|
||||
pureView.push();
|
||||
if(nameIsString())
|
||||
{
|
||||
ImageResourceDirString resDirString;
|
||||
pureView.push();
|
||||
pureView.seek(resBase+offsetName(),PureViewOfFile::SeekSet);
|
||||
resDirString.read(pureView);
|
||||
mResourceName=resDirString.name();
|
||||
pureView.pop();
|
||||
}
|
||||
if(dataIsDirectory())
|
||||
{
|
||||
// String resString=getResource(name());
|
||||
// if(!resString.isNull())::OutputDebugString(resString+String("\n"));
|
||||
// mResourceType=getResource(name());
|
||||
if(mResourceName.isNull())mResourceName=getResource(name());
|
||||
if(!mResourceName.isNull())::OutputDebugString(mResourceName+String("\n"));
|
||||
pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet);
|
||||
mImageResourceDirectory.read(resBase,deltaOffset,pureView);
|
||||
}
|
||||
else
|
||||
{
|
||||
pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet);
|
||||
mImageResourceDataEntry.read(deltaOffset,pureView);
|
||||
}
|
||||
pureView.pop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ImageResourceDirectoryEntry imgResDirEntry;
|
||||
// imgResDirEntry.read(resBase,deltaOffset,pureView);
|
||||
// mImageResourceDirectoryEntries.insert(&imgResDirEntry);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
mResStrings.insert(&String("???_0"));
|
||||
mResStrings.insert(&String("CURSOR"));
|
||||
mResStrings.insert(&String("BITMAP"));
|
||||
mResStrings.insert(&String("ICON"));
|
||||
mResStrings.insert(&String("MENU"));
|
||||
mResStrings.insert(&String("DIALOG"));
|
||||
mResStrings.insert(&String("STRING"));
|
||||
mResStrings.insert(&String("FONTDIR"));
|
||||
mResStrings.insert(&String("FONT"));
|
||||
mResStrings.insert(&String("ACCELERATORS"));
|
||||
mResStrings.insert(&String("RCDATA"));
|
||||
mResStrings.insert(&String("MESSAGETABLE"));
|
||||
mResStrings.insert(&String("GROUP_CURSOR"));
|
||||
mResStrings.insert(&String("???_13"));
|
||||
mResStrings.insert(&String("GROUP_ICON"));
|
||||
mResStrings.insert(&String("???_15"));
|
||||
mResStrings.insert(&String("VERSION"));
|
||||
|
||||
|
||||
|
||||
vxdView.seek(vxdHeader.neHeaderAddress()+vxdHeader.objectTableOffset(),PureViewOfFile::SeekSet);
|
||||
for(int
|
||||
|
||||
|
||||
VxDObject vxdObj;
|
||||
for(int objIndex=0;objIndex<vxdHeader.objectCount();objIndex++)
|
||||
{
|
||||
vxdObj<<vxdView;
|
||||
String strFlags;
|
||||
::sprintf(strFlags,"virt. size:%08lx reloc. base:%08lx table index:%08lx table entries:%08lx",
|
||||
vxdObj.virtualSize(),vxdObj.relocationBaseAddress(),vxdObj.pageTableIndex(),vxdObj.pageTableEntries());
|
||||
strFlags+=String(" ")+(String)vxdObj;
|
||||
::OutputDebugString(strFlags+String("\n"));
|
||||
}
|
||||
|
||||
|
||||
pureView.seek(neHeaderAddress()+objectTableOffset(),PureViewOfFile::SeekSet);
|
||||
for(int objIndex=0;objIndex<objectCount();objIndex++){VxDObjects::insert(&VxDObject());VxDObjects::operator[](objIndex)<<pureView;}
|
||||
getNames(pureView);
|
||||
|
||||
|
||||
|
||||
class DirectoryEntryKey
|
||||
{
|
||||
public:
|
||||
enum Key{ExportDirectory=IMAGE_DIRECTORY_ENTRY_EXPORT,
|
||||
ImportDirectory=IMAGE_DIRECTORY_ENTRY_IMPORT,
|
||||
ResourceDirectory=IMAGE_DIRECTORY_ENTRY_RESOURCE,
|
||||
ExceptionDirectory=IMAGE_DIRECTORY_ENTRY_EXCEPTION,
|
||||
SecurityDirectory=IMAGE_DIRECTORY_ENTRY_SECURITY,
|
||||
BaseRelocationTableDirectory=IMAGE_DIRECTORY_ENTRY_BASERELOC,
|
||||
DebugDirectory=IMAGE_DIRECTORY_ENTRY_DEBUG,
|
||||
DescriptionStringDirectory=IMAGE_DIRECTORY_ENTRY_COPYRIGHT,
|
||||
MachineValueDirectory=IMAGE_DIRECTORY_ENTRY_GLOBALPTR,
|
||||
ThreadLocalStorageDirectory=IMAGE_DIRECTORY_ENTRY_TLS,
|
||||
LoadConfigurationDirectory=IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
|
||||
BoundImportDirectory=IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,
|
||||
ImportAddressTableDirectory=IMAGE_DIRECTORY_ENTRY_IAT
|
||||
};
|
||||
DirectoryEntryKey(Key entryEntry=ImportDirectory);
|
||||
DirectoryEntryKey(const DirectoryEntryKey &someDirectoryEntryKey);
|
||||
virtual ~DirectoryEntryKey();
|
||||
DirectoryEntryKey &operator=(const DirectoryEntryKey &someDirectoryEntryKey);
|
||||
WORD operator==(const DirectoryEntryKey &someDirectoryEntryKey);
|
||||
Key entryKey(void)const;
|
||||
void entryKey(Key entryKey);
|
||||
|
||||
|
||||
|
||||
// development of this method is currently in progress
|
||||
BOOL PEHeader::loadImageRelocationDirectory(ImageRelocations &imageRelocations,PureViewOfFile &pureView,BOOL isMemoryImage)
|
||||
{
|
||||
DirectoryEntryKey sectionKey;
|
||||
ImageDataDirectory imageSectionDirectory;
|
||||
ImageSectionHeader relocationSectionHeader;
|
||||
DWORD deltaOffset;
|
||||
BOOL msImage(FALSE);
|
||||
|
||||
imageRelocations.remove();
|
||||
if(!isOkay())return FALSE;
|
||||
sectionKey.entryKey(DirectoryEntryKey::ResourceDirectory);
|
||||
imageSectionDirectory=((ImageOptionalHeader&)*this)[sectionKey];
|
||||
if(!enclosingSectionHeader(imageSectionDirectory.virtualAddress(),relocationSectionHeader,deltaOffset))return FALSE;
|
||||
for(short sectionIndex=0;sectionIndex<size();sectionIndex++)if(((PureVector<ImageSectionHeader>&)*this)[sectionIndex].name()==String(".reloc")){msImage=TRUE;break;}
|
||||
return imageRelocations.size()?TRUE:FALSE;
|
||||
}
|
||||
Reference in New Issue
Block a user