#include #include #include #include WORD ImageExportDescriptors::loadImageExports(PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders,WORD sortFlag) { ImageSectionHeader exportFunctionsSectionHeader; QuickSort quickSort; Array exportFunctions; Array exportOrdinals; PureDWORD exportFunctionEntryPoint; Array exportNames; DWORD deltaFunctions; size(0); (ImageExportDirectory&)*this<&)*this); return TRUE; } WORD ImageExportDescriptors::loadExportNames(Array &exportNames,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView) { ImageSectionHeader exportNamesSectionHeader; String exportName; DWORD deltaNames; DWORD nameRVA; if(!numberOfNames())return false; exportNames.size(numberOfNames()); imageSectionHeaders.enclosingSectionHeader(addressOfNames(),exportNamesSectionHeader,deltaNames); pureView.seek(addressOfNames()-deltaNames,PureViewOfFile::SeekSet); for(DWORD nameIndex=0;nameIndex &exportOrdinals,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView) { ImageSectionHeader exportOrdinalsSectionHeader; WORD exportOrdinal; DWORD deltaOrdinals; if(!numberOfNames())return false; exportOrdinals.size(numberOfNames()); imageSectionHeaders.enclosingSectionHeader(addressOfNameOrdinals(),exportOrdinalsSectionHeader,deltaOrdinals); pureView.seek(addressOfNameOrdinals()-deltaOrdinals,PureViewOfFile::SeekSet); for(DWORD ordinalIndex=0;ordinalIndex &exportFunctions,ImageSectionHeaders &imageSectionHeaders,PureViewOfFile &pureView) { ImageSectionHeader exportFunctionsSectionHeader; DWORD exportFunction; DWORD deltaFunctions; if(!numberOfFunctions())return false; exportFunctions.size(numberOfFunctions()); imageSectionHeaders.enclosingSectionHeader(addressOfFunctions(),exportFunctionsSectionHeader,deltaFunctions); pureView.seek(addressOfFunctions()-deltaFunctions,PureViewOfFile::SeekSet); for(DWORD functionIndex=0;functionIndex &exportNames,Array &exportOrdinals,Array &exportFunctions) { DWORD sizeExportNames(exportNames.size()); DWORD sizeExportFunctions(exportFunctions.size()); String entryPointString; size(sizeExportFunctions); for(DWORD functionIndex=0;functionIndex&)*this)[functionIndex].imageExportEntryPoint(exportFunctions[functionIndex]); ((Array&)*this)[functionIndex].imageExportOrdinal(functionIndex+base()); } for(LONG nameIndex=0;nameIndex&)*this)[exportOrdinals[nameIndex].getValue()].imageExportName(exportNames[nameIndex]); ((Array&)*this)[exportOrdinals[nameIndex].getValue()].imageExportOrdinal(exportOrdinals[nameIndex].getValue()+(WORD)base()); } for(functionIndex=0;functionIndex&)*this)[functionIndex].imageExportName().isNull()) { ::sprintf(entryPointString,"@%d",((Array&)*this)[functionIndex].imageExportOrdinal().getValue()); ((Array&)*this)[functionIndex].imageExportName(entryPointString); } } return TRUE; } WORD ImageExportDescriptors::locateImageExportName(String imageExportName,ImageExportDescriptor &imageExportDescriptor,DWORD &exportIndex) { DWORD sizeExportFunctions(size()); WORD exportOrdinal; if(imageExportName.isNull())return FALSE; for(DWORD itemIndex=0;itemIndex