49 lines
1.9 KiB
C++
49 lines
1.9 KiB
C++
#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();
|
|
}
|
|
|
|
|