4#define INVALID_NAME "<invalid>"
27 if (ptr == NULL)
return NULL;
29 return (IMAGE_EXPORT_DIRECTORY*) ptr;
40 IMAGE_EXPORT_DIRECTORY* exp =
exportDir();
41 if (exp == NULL)
return 0;
43 size_t maxNames = exp->NumberOfNames;
45 offset_t nameOrdRVA = exp->AddressOfNameOrdinals;
48 for (i = 0; i < maxNames; i++) {
52 if (nameOrd == NULL)
break;
56 nameOrdRVA +=
sizeof(WORD);
68 IMAGE_EXPORT_DIRECTORY* exp =
exportDir();
69 if (exp == NULL)
return 0;
71 size_t maxFunc = exp->NumberOfFunctions;
73 for (
size_t i = 0; i < maxFunc; i++) {
76 if (entry->
getPtr() == NULL) {
87 if (
getPtr() == NULL)
return 0;
88 return sizeof(IMAGE_EXPORT_DIRECTORY);
93 QString infoName =
"Export";
95 if (libName.length() >= 0) {
96 infoName +=
": "+ libName;
104 if (d == NULL)
return NULL;
108 case TIMESTAMP:
return &d->TimeDateStamp;
112 case BASE:
return &d->Base;
114 case NAMES_NUM:
return &d->NumberOfNames;
129 return "ReproChecksum";
131 return "TimeDateStamp";
136 case BASE:
return "Base";
162 if (!isOk)
return NULL;
168 if (!ptr)
return NULL;
176 if (!name)
return name;
181 return QString(name);
189 case NAME_RVA:
return getFuncNameRvaPtr();
194DWORD* ExportEntryWrapper::getFuncRvaPtr()
196 if (this->parentDir == NULL)
return NULL;
197 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
198 if (exp == NULL)
return NULL;
200 uint64_t funcRva = exp->AddressOfFunctions;
201 funcRva += (this->
entryNum *
sizeof(DWORD));
209 if (this->parentDir == NULL || parentDir->
exportDir() == NULL) {
212 return sizeof(DWORD);
226 QTextStream(&ordStr) <<
"<ord: " << QString::number(val, 16) <<
">";
230 if (name == NULL)
return "";
231 return QString(name);
238 case NAME_RVA:
return "FuncNameRva";
245 DWORD *ptr = this->getFuncRvaPtr();
253 if (this->parentDir == NULL)
return 0;
254 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
255 if (exp == NULL)
return 0;
257 uint32_t ordinal =
static_cast<uint32_t
>(this->
entryNum) + exp->Base;
261uint32_t ExportEntryWrapper::getFuncNameId()
263 if (this->parentDir == NULL)
return INVALID_ID;
265 WORD ord =
static_cast<WORD
>(this->
entryNum);
266 std::map<WORD, DWORD>::iterator found = parentDir->
ordToNameId.find(ord);
270 return found->second;
273void* ExportEntryWrapper::getFuncNameRvaPtr()
275 uint32_t nameId = getFuncNameId();
278 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
279 if (exp == NULL)
return NULL;
281 if (nameId >= exp->NumberOfNames)
return NULL;
283 uint64_t nameAddrRVA = exp->AddressOfNames + (nameId *
sizeof(DWORD));
290 DWORD* valuePtr = (DWORD*) getFuncNameRvaPtr();
292 DWORD value = (*valuePtr);
293 return static_cast<offset_t>(value);
302 if (name == NULL)
return NULL;
309 if (this->parentDir == NULL)
return NULL;
310 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
311 if (exp == NULL)
return NULL;
313 DWORD* funcRvaPtr = (DWORD*) this->getFuncRvaPtr();
314 if (funcRvaPtr == NULL)
return NULL;
317 if (strPtr == NULL)
return NULL;
324 if (forwarderNameLen > 0) {
const offset_t INVALID_ADDR
virtual offset_t getOffset(void *ptr, bool allowExceptions=false)
offset_t getDirEntryAddress()
virtual uint64_t getNumValue(size_t fieldId, size_t subField, bool *isOk)
std::vector< ExeNodeWrapper * > entries
BYTE * getContentAt(offset_t offset, bufsize_t size, bool allowExceptions=false)
virtual offset_t getRawSize() const
virtual QString getLibraryName()
std::map< WORD, DWORD > ordToNameId
virtual void * getFieldPtr(size_t fieldId, size_t subField)
IMAGE_EXPORT_DIRECTORY * exportDir()
virtual QString getName()
virtual Executable::addr_type containsAddrType(size_t fieldId, size_t subField=FIELD_NONE)
virtual QString getFieldName(size_t fieldId)
virtual bufsize_t getSize()
friend class ExportEntryWrapper
virtual QString getFieldName(size_t fieldId)
virtual bufsize_t getSize()
offset_t getFuncNameRva()
virtual void * getFieldPtr(size_t fieldId, size_t subField=FIELD_NONE)
virtual QString getName()
size_t forwarderNameLen(const char *ptr, size_t max_len)
bool isStrLonger(const char *inp, size_t maxLen)