7 #ifndef RETDEC_PELIB_DELAY_IMPORT_DIRECTORY_H
8 #define RETDEC_PELIB_DELAY_IMPORT_DIRECTORY_H
24 std::vector<PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD>
records;
48 if (virtualAddress != 0)
61 if (virtualAddress > imageBase)
63 virtualAddress = virtualAddress - imageBase;
67 return virtualAddress;
83 importDescriptor.
NameRva == 0 &&
101 if(rva >= sizeOfImage)
111 if((rva + i) >= sizeOfImage)
141 std::vector<uint64_t> nameAddresses;
146 std::uint64_t nameAddress;
149 if(imageLoader.
readPointer(rva2, nameAddress) != pointerSize)
156 nameAddresses.push_back(nameAddress);
163 std::vector<uint64_t> funcAddresses;
167 for (std::size_t i = 0; i < nameAddresses.size(); i++)
169 std::uint64_t funcAddress;
172 if(imageLoader.
readPointer(rva2, funcAddress) != pointerSize)
179 funcAddresses.push_back(funcAddress);
186 std::size_t numberOfFunctions = std::min(nameAddresses.size(), funcAddresses.size());
187 for (std::size_t i = 0; i < numberOfFunctions; i++)
190 std::uint64_t nameAddress = nameAddresses[i];
191 std::uint64_t funcAddress = funcAddresses[i];
194 if (!(nameAddress & ordinalMask))
201 if(imageLoader.
readImage(&
function.hint, nameAddress,
sizeof(
function.hint)) !=
sizeof(
function.hint))
209 function.hint = (std::uint16_t)(nameAddress & 0xFFFF);
213 if(imageBase <= funcAddress && funcAddress < imageBase + sizeOfImage)
214 funcAddress -= imageBase;
215 function.address = funcAddress;
Definition: DelayImportDirectory.h:20
std::uint64_t normalizeDelayImportValue(std::uint64_t imageBase, std::uint64_t virtualAddress)
Definition: DelayImportDirectory.h:45
void normalize32BitDelayImport(PELIB_IMAGE_DELAY_LOAD_DESCRIPTOR &rec, std::uint64_t imageBase)
Definition: DelayImportDirectory.h:70
DelayImportDirectoryIterator end() const
Definition: DelayImportDirectory.h:241
std::vector< PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD > records
Definition: DelayImportDirectory.h:24
std::vector< PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD >::const_iterator DelayImportDirectoryIterator
Definition: DelayImportDirectory.h:21
int read(ImageLoader &imageLoader)
Definition: DelayImportDirectory.h:92
const PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD * getFile(std::size_t index) const
Definition: DelayImportDirectory.h:231
~DelayImportDirectory()
Definition: DelayImportDirectory.h:37
void init()
Definition: DelayImportDirectory.h:26
std::size_t getNumberOfFiles() const
Definition: DelayImportDirectory.h:226
DelayImportDirectoryIterator begin() const
Definition: DelayImportDirectory.h:236
bool isTerminationEntry(PELIB_IMAGE_DELAY_LOAD_DESCRIPTOR &importDescriptor)
Definition: DelayImportDirectory.h:80
DelayImportDirectory()
Definition: DelayImportDirectory.h:32
Definition: ImageLoader.h:138
std::uint32_t readPointer(std::uint32_t rva, std::uint64_t &pointerValue)
Definition: ImageLoader.cpp:291
std::uint32_t getDataDirSize(std::size_t dataDirIndex) const
Definition: ImageLoader.h:321
std::uint32_t getDataDirRva(std::size_t dataDirIndex) const
Definition: ImageLoader.h:315
std::uint32_t readString(std::string &str, std::uint32_t rva, std::uint32_t maxLength=65535)
Definition: ImageLoader.cpp:275
std::uint64_t getOrdinalMask() const
Definition: ImageLoader.h:210
std::uint32_t getImageBitability() const
Definition: ImageLoader.cpp:432
std::uint64_t getImageBase() const
Definition: ImageLoader.h:265
std::uint32_t readImage(void *buffer, std::uint32_t rva, std::uint32_t bytesToRead)
Definition: ImageLoader.cpp:171
std::uint32_t getSizeOfImage() const
Definition: ImageLoader.h:280
std::uint32_t getPointerSize() const
Definition: ImageLoader.cpp:322
Definition: BoundImportDirectory.h:21
@ PELIB_IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
Definition: PeLibAux.h:182
const std::size_t IMPORT_LIBRARY_MAX_LENGTH
Definition: PeLibAux.h:1130
const std::size_t IMPORT_SYMBOL_MAX_LENGTH
Definition: PeLibAux.h:1131
const std::uint32_t PELIB_DELAY_ATTRIBUTE_V2
Definition: PeLibAux.h:1399
@ ERROR_NONE
Definition: PeLibAux.h:33
@ ERROR_INVALID_FILE
Definition: PeLibAux.h:35
Definition: PeLibAux.h:1091
Definition: PeLibAux.h:1402
std::string Name
Definition: PeLibAux.h:1410
void addFunction(const PELIB_DELAY_IMPORT &function)
Definition: PeLibAux.h:1430
PELIB_IMAGE_DELAY_LOAD_DESCRIPTOR delayedImport
Definition: PeLibAux.h:1409
Definition: PeLibAux.h:1388
std::uint32_t BoundDelayImportTableRva
Definition: PeLibAux.h:1394
std::uint32_t DelayImportAddressTableRva
Definition: PeLibAux.h:1392
std::uint32_t ModuleHandleRva
Definition: PeLibAux.h:1391
std::uint32_t TimeStamp
Definition: PeLibAux.h:1396
std::uint32_t Attributes
Definition: PeLibAux.h:1389
std::uint32_t NameRva
Definition: PeLibAux.h:1390
std::uint32_t UnloadDelayImportTableRva
Definition: PeLibAux.h:1395
std::uint32_t DelayImportNameTableRva
Definition: PeLibAux.h:1393