Initial
This commit is contained in:
48
image/IMPORT.CPP
Normal file
48
image/IMPORT.CPP
Normal file
@@ -0,0 +1,48 @@
|
||||
#include <image/import.hpp>
|
||||
|
||||
void ImageImportDescriptor::loadImageImportThunks(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders)
|
||||
{
|
||||
if(!isOkay())return;
|
||||
if(!firstThunkRVA()&&!originalFirstThunkRVA())return;
|
||||
if(originalFirstThunkRVA())loadImageImportThunk(originalFirstThunkRVA(),deltaOffset,
|
||||
imageOriginalThunkImportOrdinals(),imageOriginalThunkImportNames(),pureView,imageSectionHeaders);
|
||||
else if(firstThunkRVA())loadImageImportThunk(firstThunkRVA(),deltaOffset,
|
||||
imageThunkImportOrdinals(),imageThunkImportNames(),pureView,imageSectionHeaders);
|
||||
}
|
||||
|
||||
void ImageImportDescriptor::loadImageFirstThunk(DWORD deltaOffset,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders)
|
||||
{
|
||||
if(!isOkay()||!firstThunkRVA())return;
|
||||
loadImageImportThunk(firstThunkRVA(),deltaOffset,
|
||||
imageThunkImportOrdinals(),imageThunkImportNames(),pureView,imageSectionHeaders);
|
||||
}
|
||||
|
||||
void ImageImportDescriptor::loadImageImportThunk(DWORD virtualAddress,DWORD deltaOffset,Block<ImageThunkData> &imageThunkImportOrdinals,Block<ImageThunkName> &imageThunkImportNames,PureViewOfFile &pureView,ImageSectionHeaders &imageSectionHeaders)
|
||||
{
|
||||
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())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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user