13 #ifndef RETDEC_PELIB_IMPORTDIRECTORY_H
14 #define RETDEC_PELIB_IMPORTDIRECTORY_H
17 #include <unordered_map>
48 std::vector<PELIB_IMAGE_IMPORT_DIRECTORY>
m_vOldiid;
50 std::vector<PELIB_IMAGE_IMPORT_DIRECTORY>
m_vNewiid;
68 for (
int i=0;i<=1;i++)
72 FileIter = std::find_if(
75 [&](
const auto& i) {
return i == strFilename; }
78 if (FileIter != EndIter)
80 auto Iter = std::find_if(
81 FileIter->originalfirstthunk.begin(),
82 FileIter->originalfirstthunk.end(),
83 std::bind(comp, std::placeholders::_1, value)
85 if (Iter != FileIter->originalfirstthunk.end())
92 while (FileIter != EndIter);
111 int addFunction(
const std::string& strFilename, std::uint16_t wHint);
113 int addFunction(
const std::string& strFilename,
const std::string& strFuncname);
118 unsigned int getFunctionIndex(
const std::string& strFilename,
const std::string& strFuncname,
currdir cdDir)
const;
134 void setFunctionName(std::uint32_t dwFilenr, std::uint32_t dwFuncnr,
currdir cdDir,
const std::string& functionName);
144 void rebuild(std::vector<std::uint8_t>& vBuffer, std::uint32_t dwRva,
bool fixEntries =
true);
146 int removeFile(
const std::string& strFilename);
148 int removeFunction(
const std::string& strFilename,
const std::string& strFuncname);
150 int removeFunction(
const std::string& strFilename, std::uint16_t wHint);
154 int write(
const std::string& strFilename, std::uint32_t uiOffset, std::uint32_t uiRva, std::uint32_t pointerSize);
159 std::uint32_t
getFirstThunk(std::uint32_t dwFilenr, std::uint32_t dwFuncnr,
currdir cdDir)
const;
160 void setFirstThunk(std::uint32_t dwFilenr, std::uint32_t dwFuncnr,
currdir cdDir, std::uint32_t value);
232 [&](
const auto& i) { return i == strFilename; }
239 iid.
name = strFilename;
248 FileIter->originalfirstthunk.push_back(td);
249 FileIter->firstthunk.push_back(td);
272 [&](
const auto& i) { return i == strFilename; }
277 td.
fname = strFuncname;
278 iid.
name = strFilename;
287 FileIter->originalfirstthunk.push_back(td);
288 FileIter->firstthunk.push_back(td);
304 const std::vector<PELIB_IMAGE_IMPORT_DIRECTORY>* currDir;
318 [&](
const auto& i) { return i == strFilename; }
321 if (FileIter != currDir->end())
323 return static_cast<unsigned int>(std::distance(currDir->begin(), FileIter));
389 if (
m_vOldiid[dwFilenr].impdesc.OriginalFirstThunk && dwFuncnr <
m_vOldiid[dwFilenr].originalfirstthunk.size())
391 return m_vOldiid[dwFilenr].originalfirstthunk[dwFuncnr].fname;
395 return m_vOldiid[dwFilenr].firstthunk[dwFuncnr].fname;
400 if (
m_vNewiid[dwFilenr].impdesc.OriginalFirstThunk)
402 return m_vNewiid[dwFilenr].originalfirstthunk[dwFuncnr].fname;
406 return m_vNewiid[dwFilenr].firstthunk[dwFuncnr].fname;
417 if (
m_vOldiid[dwFilenr].impdesc.OriginalFirstThunk)
419 m_vOldiid[dwFilenr].originalfirstthunk[dwFuncnr].fname = functionName;
423 m_vOldiid[dwFilenr].firstthunk[dwFuncnr].fname = functionName;
428 if (
m_vNewiid[dwFilenr].impdesc.OriginalFirstThunk)
430 m_vNewiid[dwFilenr].originalfirstthunk[dwFuncnr].fname = functionName;
434 m_vNewiid[dwFilenr].firstthunk[dwFuncnr].fname = functionName;
471 if (
m_vOldiid[dwFilenr].impdesc.OriginalFirstThunk && dwFuncnr <
m_vOldiid[dwFilenr].originalfirstthunk.size())
473 return m_vOldiid[dwFilenr].originalfirstthunk[dwFuncnr].hint;
477 return m_vOldiid[dwFilenr].firstthunk[dwFuncnr].hint;
480 else return m_vNewiid[dwFilenr].originalfirstthunk[dwFuncnr].hint;
488 if (
m_vOldiid[dwFilenr].impdesc.OriginalFirstThunk)
490 m_vOldiid[dwFilenr].originalfirstthunk[dwFuncnr].hint = value;
494 m_vOldiid[dwFilenr].firstthunk[dwFuncnr].hint = value;
497 else m_vNewiid[dwFilenr].originalfirstthunk[dwFuncnr].hint = value;
510 return static_cast<std::uint32_t
>(numFiles);
522 if (cdDir ==
OLDDIR)
return static_cast<unsigned int>(
m_vOldiid[dwFilenr].firstthunk.size());
523 else return static_cast<unsigned int>(
m_vNewiid[dwFilenr].firstthunk.size());
526 inline bool isInvalidOrdinal(std::uint64_t ordinal, std::uint64_t ordinalMask, std::uint64_t sizeOfImage)
529 if((ordinal & ordinalMask) == 0)
532 if(ordinal >= sizeOfImage)
540 ordinal = ordinal & ~ordinalMask;
541 return (ordinal >> 0x10) != 0;
561 if(importName.size() == 0)
566 if(importName[0] <= 0x20)
571 for(
unsigned char singleChar : importName)
573 if(singleChar < 0x20 || singleChar >= 0x7f)
591 std::uint32_t uiIndex;
593 std::uint32_t rva = rvaBegin;
599 if(rva > SizeOfImage)
606 std::vector<PELIB_IMAGE_IMPORT_DIRECTORY> vOldIidCurr;
607 std::unordered_map<std::string, int> uniqueDllList;
608 std::uint32_t uiDescCounter = 0;
662 if (uniqueDllList.find(iidCurr.
name) == uniqueDllList.end())
665 uniqueDllList.emplace(iidCurr.
name, 1);
683 vOldIidCurr.push_back(std::move(iidCurr));
690 for(std::size_t i = 0; i < vOldIidCurr.size(); i++)
695 std::uint32_t thunkRva = vOldIidCurr[i].impdesc.OriginalFirstThunk;
699 for(uiIndex = 0; ; uiIndex++)
727 vOldIidCurr[i].originalfirstthunk.push_back(tdCurr);
733 if (vOldIidCurr[i].impdesc.OriginalFirstThunk < thunkRva)
738 std::set<std::uint32_t> seenOffsets;
739 for (std::size_t i = 0; i < vOldIidCurr.size(); i++)
741 std::uint32_t thunkRva = vOldIidCurr[i].impdesc.FirstThunk;
749 if (seenOffsets.count(thunkRva))
753 seenOffsets.insert(thunkRva);
756 for(uiIndex = 0; ; uiIndex++)
785 vOldIidCurr[i].firstthunk.push_back(tdCurr);
788 if (hasValidIlt && vOldIidCurr[i].originalfirstthunk.size() == vOldIidCurr[i].firstthunk.size())
798 if (vOldIidCurr[i].impdesc.FirstThunk < thunkRva)
803 for (
unsigned int i=0;i<vOldIidCurr.size();i++)
806 vOldIidCurr[i].originalfirstthunk :
807 vOldIidCurr[i].firstthunk;
808 for (
auto & thunkData : thunkVector)
810 if (thunkData.itd.Ordinal & OrdinalMask)
816 if(imageLoader.
readImage(&thunkData.hint, thunkData.itd.Ordinal,
sizeof(std::uint16_t)) !=
sizeof(std::uint16_t))
828 static_cast<unsigned int>(thunkData.itd.Ordinal),
829 static_cast<unsigned int>(thunkData.itd.Ordinal +
sizeof(thunkData.hint) + thunkData.fname.length() + 1)
844 std::uint32_t pointerValue32 = (std::uint32_t)pointerValue;
845 obBuffer << pointerValue32;
849 obBuffer << pointerValue;
863 unsigned int uiImprva = dwRva;
866 unsigned int uiSizeofdllnames = 0, uiSizeoffuncnames = 0;
867 unsigned int uiSizeofoft = 0;
869 for (
unsigned int i=0;i<
m_vNewiid.size();i++)
871 uiSizeofdllnames +=
static_cast<unsigned int>(
m_vNewiid[i].name.size()) + 1;
872 uiSizeofoft += (
static_cast<unsigned int>(
m_vNewiid[i].originalfirstthunk.size())+1) *
m_thunkSize;
874 for(
unsigned int j=0;j<
m_vNewiid[i].originalfirstthunk.size();j++)
877 uiSizeoffuncnames += (
static_cast<unsigned int>(
m_vNewiid[i].originalfirstthunk[j].fname.size()) + 3);
889 for (
unsigned int i=0;i<
m_vOldiid.size();i++)
891 obBuffer <<
m_vOldiid[i].impdesc.OriginalFirstThunk;
892 obBuffer <<
m_vOldiid[i].impdesc.TimeDateStamp;
893 obBuffer <<
m_vOldiid[i].impdesc.ForwarderChain;
895 obBuffer <<
m_vOldiid[i].impdesc.FirstThunk;
898 unsigned int dllsize = 0;
900 for (
unsigned int i=0;i<
m_vNewiid.size();i++)
902 std::uint32_t dwPoft = uiSizeofdescriptors + uiImprva;
904 for (
unsigned int j=1;j<=i;j++)
906 dwPoft += (
static_cast<unsigned int>(
m_vNewiid[j-1].originalfirstthunk.size()) + 1) *
m_thunkSize;
909 obBuffer << (fixEntries ? dwPoft :
m_vNewiid[i].impdesc.OriginalFirstThunk);
910 obBuffer <<
m_vNewiid[i].impdesc.TimeDateStamp;
911 obBuffer <<
m_vNewiid[i].impdesc.ForwarderChain;
912 std::uint32_t dwPdll = uiSizeofdescriptors + uiSizeofoft + uiImprva + dllsize;
913 obBuffer << (fixEntries ? dwPdll :
m_vNewiid[i].impdesc.Name);
914 obBuffer <<
m_vNewiid[i].impdesc.FirstThunk;
919 m_vNewiid[i].impdesc.OriginalFirstThunk = dwPoft;
923 dllsize +=
static_cast<unsigned int>(
m_vNewiid[i].name.size()) + 1;
926 obBuffer << static_cast<std::uint32_t>(0);
927 obBuffer << static_cast<std::uint32_t>(0);
928 obBuffer << static_cast<std::uint32_t>(0);
929 obBuffer << static_cast<std::uint32_t>(0);
930 obBuffer << static_cast<std::uint32_t>(0);
932 std::uint64_t uiPfunc = uiSizeofdescriptors + uiSizeofoft + uiSizeofdllnames + uiImprva;
935 for (std::size_t i = 0;i<
m_vNewiid.size();i++)
937 for (std::size_t j = 0;j<
m_vNewiid[i].originalfirstthunk.size();j++)
949 m_vNewiid[i].originalfirstthunk[j].itd.Ordinal = uiPfunc;
951 uiPfunc +=
static_cast<std::uint64_t
>(
m_vNewiid[i].originalfirstthunk[j].fname.size()) + 3;
958 for (std::size_t i = 0; i <
m_vNewiid.size(); i++)
964 for (
unsigned int i=0;i<
m_vNewiid.size();i++)
966 for (
unsigned int j=0;j<
m_vNewiid[i].originalfirstthunk.size();j++)
968 obBuffer <<
m_vNewiid[i].originalfirstthunk[j].hint;
969 obBuffer.
add(
m_vNewiid[i].originalfirstthunk[j].fname.c_str(),
static_cast<unsigned int>(
m_vNewiid[i].originalfirstthunk[j].fname.size()) + 1);
981 unsigned int oldSize =
static_cast<unsigned int>(
m_vNewiid.size());
987 [&](
const auto& i) { return i == strFilename; }
992 return oldSize ==
m_vNewiid.size() ? 1 : 0;
1009 if (
isEqualNc(viPos->name, strFilename))
1011 unsigned int oldSize =
static_cast<unsigned int>(viPos->originalfirstthunk.size());
1012 viPos->originalfirstthunk.erase(
1014 viPos->originalfirstthunk.begin(),
1015 viPos->originalfirstthunk.end(),
1016 [&](
const auto& i) { return i.equalFunctionName(strFuncname); }
1018 viPos->originalfirstthunk.end()
1020 if (viPos->originalfirstthunk.size() != oldSize) notFound = 0;
1041 if (
isEqualNc(viPos->name, strFilename))
1043 unsigned int oldSize =
static_cast<unsigned int>(viPos->originalfirstthunk.size());
1044 viPos->originalfirstthunk.erase(
1046 viPos->originalfirstthunk.begin(),
1047 viPos->originalfirstthunk.end(),
1048 [&](
const auto& i) { return i.equalHint(wHint); }
1050 viPos->originalfirstthunk.end()
1052 if (viPos->originalfirstthunk.size() != oldSize) notFound = 0;
1068 int ImportDirectory::write(
const std::string& strFilename, std::uint32_t uiOffset, std::uint32_t uiRva, std::uint32_t pointerSize)
1070 std::fstream ofFile(strFilename.c_str(), std::ios_base::in);
1075 ofFile.open(strFilename.c_str(), std::ios_base::out | std::ios_base::binary);
1080 ofFile.open(strFilename.c_str(), std::ios_base::in | std::ios_base::out | std::ios_base::binary);
1088 ofFile.seekp(uiOffset, std::ios_base::beg);
1090 std::vector<std::uint8_t> vBuffer;
1095 ofFile.write(
reinterpret_cast<const char*
>(vBuffer.data()), vBuffer.size());
1111 std::uint32_t totalSize = 0;
1115 totalSize += element.calculateSize(pointerSize);
1214 return m_vOldiid[dwFilenr].impdesc.FirstThunk;
1218 return m_vNewiid[dwFilenr].impdesc.FirstThunk;
1227 m_vOldiid[dwFilenr].impdesc.FirstThunk = value;
1231 m_vNewiid[dwFilenr].impdesc.FirstThunk = value;
1245 return m_vOldiid[dwFilenr].impdesc.OriginalFirstThunk;
1249 return m_vNewiid[dwFilenr].impdesc.OriginalFirstThunk;
1258 m_vOldiid[dwFilenr].impdesc.OriginalFirstThunk = value;
1262 m_vNewiid[dwFilenr].impdesc.OriginalFirstThunk = value;
1277 return m_vOldiid[dwFilenr].impdesc.ForwarderChain;
1281 return m_vNewiid[dwFilenr].impdesc.ForwarderChain;
1290 m_vOldiid[dwFilenr].impdesc.ForwarderChain = value;
1294 m_vNewiid[dwFilenr].impdesc.ForwarderChain = value;
1308 return m_vOldiid[dwFilenr].impdesc.TimeDateStamp;
1312 return m_vNewiid[dwFilenr].impdesc.TimeDateStamp;
1321 m_vOldiid[dwFilenr].impdesc.TimeDateStamp = value;
1325 m_vNewiid[dwFilenr].impdesc.TimeDateStamp = value;
1334 return m_vOldiid[dwFilenr].impdesc.Name;
1338 return m_vNewiid[dwFilenr].impdesc.Name;
1347 m_vOldiid[dwFilenr].impdesc.Name = value;
1351 m_vNewiid[dwFilenr].impdesc.Name = value;
1364 if (cdDir ==
OLDDIR)
return m_vOldiid[dwFilenr].firstthunk[dwFuncnr].itd.Ordinal;
1365 else return m_vNewiid[dwFilenr].firstthunk[dwFuncnr].itd.Ordinal;
1371 if (cdDir ==
OLDDIR)
m_vOldiid[dwFilenr].firstthunk[dwFuncnr].itd.Ordinal = value;
1372 else m_vNewiid[dwFilenr].firstthunk[dwFuncnr].itd.Ordinal = value;
1386 if (dwFuncnr <
m_vOldiid[dwFilenr].originalfirstthunk.size())
1388 return m_vOldiid[dwFilenr].originalfirstthunk[dwFuncnr].itd.Ordinal;
1397 return m_vNewiid[dwFilenr].originalfirstthunk[dwFuncnr].itd.Ordinal;
1404 if (cdDir ==
OLDDIR)
m_vOldiid[dwFilenr].originalfirstthunk[dwFuncnr].itd.Ordinal = value;
1405 else m_vNewiid[dwFilenr].originalfirstthunk[dwFuncnr].itd.Ordinal = value;
Definition: ImageLoader.h:138
std::uint32_t readPointer(std::uint32_t rva, std::uint64_t &pointerValue)
Definition: ImageLoader.cpp:291
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 readImage(void *buffer, std::uint32_t rva, std::uint32_t bytesToRead)
Definition: ImageLoader.cpp:171
std::uint32_t getSizeOfHeaders() const
Definition: ImageLoader.h:275
std::uint32_t getSizeOfImage() const
Definition: ImageLoader.h:280
std::uint32_t getPointerSize() const
Definition: ImageLoader.cpp:322
Class that handles import directories.
Definition: ImportDirectory.h:42
void setRvaOfName(std::uint32_t dwFilenr, currdir cdDir, std::uint32_t value)
Definition: ImportDirectory.h:1343
void setForwarderChain(std::uint32_t dwFilenr, currdir cdDir, std::uint32_t value)
Definition: ImportDirectory.h:1286
void setPointerSize(std::uint32_t pointerSize)
Updates the pointer size for the import directory.
Definition: ImportDirectory.h:552
void rebuild(std::vector< std::uint8_t > &vBuffer, std::uint32_t dwRva, bool fixEntries=true)
Rebuild the import directory.
Definition: ImportDirectory.h:861
void setFunctionHint(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir, std::uint16_t value)
Definition: ImportDirectory.h:484
int removeFunction(const std::string &strFilename, const std::string &strFuncname)
Remove a function from the import directory.
Definition: ImportDirectory.h:1001
const std::vector< std::pair< unsigned int, unsigned int > > & getOccupiedAddresses() const
Definition: ImportDirectory.h:1409
std::uint32_t getNumberOfFiles(currdir cdDir) const
Get the number of files which are imported.
Definition: ImportDirectory.h:506
int read(ImageLoader &imageLoader)
Read a file's import directory.
Definition: ImportDirectory.h:587
std::uint64_t m_ordinalMask
Mask for file ordinal.
Definition: ImportDirectory.h:54
std::uint32_t getNumberOfFunctions(std::uint32_t dwFilenr, currdir cdDir) const
Get the number of fucntions which are imported by a specific file.
Definition: ImportDirectory.h:520
std::uint32_t getOriginalFirstThunk(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir) const
Returns the OriginalFirstThunk value of a function.
Definition: ImportDirectory.h:1382
void setFileName(std::uint32_t filenr, currdir cdDir, const std::string &name)
Definition: ImportDirectory.h:368
LoaderError m_ldrError
Error detected by the import table parser.
Definition: ImportDirectory.h:56
unsigned int calculateSize(std::uint32_t pointerSize) const
Returns the size of the current import directory.
Definition: ImportDirectory.h:1109
std::vector< std::pair< unsigned int, unsigned int > > m_occupiedAddresses
Stores RVAs which are occupied by this import directory.
Definition: ImportDirectory.h:52
std::string getFileName(std::uint32_t dwFilenr, currdir cdDir) const
Get the name of an imported file.
Definition: ImportDirectory.h:361
std::size_t m_thunkSize
size of single thunk item
Definition: ImportDirectory.h:58
void setFirstThunk(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir, std::uint32_t value)
Definition: ImportDirectory.h:1369
unsigned int getFunctionIndex(const std::string &strFilename, const std::string &strFuncname, currdir cdDir) const
Get the ID of a function through it's name.
Definition: ImportDirectory.h:342
std::uint16_t getFunctionHint(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir) const
Get the hint of an imported function.
Definition: ImportDirectory.h:466
int removeFile(const std::string &strFilename)
Remove a file from the import directory.
Definition: ImportDirectory.h:979
std::uint32_t getRvaOfName(const std::string &strFilename, currdir cdDir) const
Definition: ImportDirectory.h:1192
ImportDirectory()
Constructor.
Definition: ImportDirectory.h:104
void writePointer(OutputBuffer &obBuffer, std::uint64_t pointerValue)
Writes pointer to the buffer (32-bit or 64-bit)
Definition: ImportDirectory.h:840
void setFunctionName(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir, const std::string &functionName)
Definition: ImportDirectory.h:412
void setTimeDateStamp(std::uint32_t dwFilenr, currdir cdDir, std::uint32_t value)
Definition: ImportDirectory.h:1317
unsigned int getFileIndex(const std::string &strFilename, currdir cdDir) const
Get the ID of a file through it's name.
Definition: ImportDirectory.h:302
void setOriginalFirstThunk(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir, std::uint32_t value)
Definition: ImportDirectory.h:1402
int addFunction(const std::string &strFilename, std::uint16_t wHint)
Add a function to the import directory.
Definition: ImportDirectory.h:221
std::uint32_t getForwarderChain(const std::string &strFilename, currdir cdDir) const
Returns the ForwarderChain value of a file.
Definition: ImportDirectory.h:1161
int write(const std::string &strFilename, std::uint32_t uiOffset, std::uint32_t uiRva, std::uint32_t pointerSize)
Writes the import directory to a file.
Definition: ImportDirectory.h:1068
bool hasFunction(std::string strFilename, T value, bool(PELIB_THUNK_DATA::*comp)(T) const) const
Tests if a certain function is imported.
Definition: ImportDirectory.h:63
std::uint32_t getFirstThunk(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir) const
Returns the FirstThunk value of a function.
Definition: ImportDirectory.h:1362
std::uint32_t getTimeDateStamp(const std::string &strFilename, currdir cdDir) const
Returns the TimeDateStamp value of a file.
Definition: ImportDirectory.h:1179
LoaderError loaderError() const
Retrieve the loader error.
Definition: ImportDirectory.h:443
std::vector< PELIB_IMAGE_IMPORT_DIRECTORY > m_vNewiid
Stores information about imported DLLs which will be added.
Definition: ImportDirectory.h:50
std::vector< PELIB_IMAGE_IMPORT_DIRECTORY > m_vOldiid
Stores information about already imported DLLs.
Definition: ImportDirectory.h:48
void setLoaderError(LoaderError ldrError)
Definition: ImportDirectory.h:449
std::vector< PELIB_IMAGE_IMPORT_DIRECTORY >::const_iterator ConstImpDirFileIterator
Definition: ImportDirectory.h:44
std::string getFunctionName(std::uint32_t dwFilenr, std::uint32_t dwFuncnr, currdir cdDir) const
Get the name of an imported function.
Definition: ImportDirectory.h:383
std::vector< PELIB_IMAGE_IMPORT_DIRECTORY >::iterator ImpDirFileIterator
Definition: ImportDirectory.h:43
Definition: OutputBuffer.h:22
void add(const char *lpBuffer, unsigned long ulSize)
Definition: OutputBuffer.cpp:32
Definition: BoundImportDirectory.h:21
@ PELIB_IMAGE_DIRECTORY_ENTRY_IMPORT
Definition: PeLibAux.h:170
LoaderError
Definition: PeLibAux.h:47
@ LDR_ERROR_IMPDIR_OUT_OF_FILE
Definition: PeLibAux.h:85
@ LDR_ERROR_IMPDIR_COUNT_EXCEEDED
Definition: PeLibAux.h:87
@ LDR_ERROR_IMPDIR_IMPORT_COUNT_EXCEEDED
Definition: PeLibAux.h:90
@ LDR_ERROR_IMPDIR_CUT
Definition: PeLibAux.h:86
@ LDR_ERROR_IMPDIR_THUNK_RVA_INVALID
Definition: PeLibAux.h:89
@ LDR_ERROR_IMPDIR_NAME_RVA_INVALID
Definition: PeLibAux.h:88
@ LDR_ERROR_NONE
Definition: PeLibAux.h:48
bool isBadImportName(const std::string &importName)
Definition: ImportDirectory.h:558
const std::size_t IMPORT_LIBRARY_MAX_LENGTH
Definition: PeLibAux.h:1130
const std::uint32_t PELIB_MAX_IMPORT_DLLS
Definition: PeLibAux.h:152
bool isEqualNc(const std::string &s1, const std::string &s2)
Definition: PeLibAux.cpp:271
bool isInvalidOrdinal(std::uint64_t ordinal, std::uint64_t ordinalMask, std::uint64_t sizeOfImage)
Definition: ImportDirectory.h:526
const std::size_t IMPORT_SYMBOL_MAX_LENGTH
Definition: PeLibAux.h:1131
currdir
Parameter for functions that can operate on the OLDDIR or new import directory.
Definition: ImportDirectory.h:25
@ NEWDIR
Definition: ImportDirectory.h:25
@ OLDDIR
Definition: ImportDirectory.h:25
bool hasValidOriginalFirstThunk(const PELIB_IMAGE_IMPORT_DESCRIPTOR &impDesc, const ImageLoader &imageLoader)
Definition: ImportDirectory.h:208
const std::uint32_t PELIB_MAX_IMPORTED_FUNCTIONS
Definition: PeLibAux.h:153
@ ERROR_NONE
Definition: PeLibAux.h:33
@ ERROR_DUPLICATE_ENTRY
Definition: PeLibAux.h:41
@ ERROR_OPENING_FILE
Definition: PeLibAux.h:34
@ ERROR_INVALID_FILE
Definition: PeLibAux.h:35
Definition: PeLibAux.h:863
static std::size_t size()
Definition: PeLibAux.h:879
std::uint32_t Name
Definition: PeLibAux.h:867
std::uint32_t OriginalFirstThunk
Definition: PeLibAux.h:864
std::uint32_t FirstThunk
Definition: PeLibAux.h:868
Definition: PeLibAux.h:1105
std::vector< PELIB_THUNK_DATA > originalfirstthunk
All original first thunk values of an imported DLL.
Definition: PeLibAux.h:1111
std::vector< PELIB_THUNK_DATA > firstthunk
All first thunk value of an imported DLL.
Definition: PeLibAux.h:1113
std::string name
The name of an imported DLL.
Definition: PeLibAux.h:1109
PELIB_IMAGE_IMPORT_DESCRIPTOR impdesc
The IMAGE_IMPORT_DESCRIPTOR of an imported DLL.
Definition: PeLibAux.h:1107
std::uint64_t Ordinal
Definition: PeLibAux.h:854
Definition: PeLibAux.h:1060
bool equalFunctionName(std::string strFunctionName) const
Definition: PeLibAux.h:1079
std::uint16_t hint
The hint of an imported function.
Definition: PeLibAux.h:1064
PELIB_IMAGE_THUNK_DATA itd
The IMAGE_THUNK_DATA struct of an imported function.
Definition: PeLibAux.h:1062
bool equalHint(std::uint16_t wHint) const
Definition: PeLibAux.h:1073
std::string fname
The function name of an imported function.
Definition: PeLibAux.h:1066