4 #define INVALID_NAME "<invalid>"
5 #define INVALID_ID (-1)
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;
130 case BASE:
return "Base";
156 if (!isOk)
return NULL;
162 if (!ptr)
return NULL;
170 if (!name)
return name;
175 return QString(name);
183 case NAME_RVA:
return getFuncNameRvaPtr();
188 DWORD* ExportEntryWrapper::getFuncRvaPtr()
190 if (this->parentDir == NULL)
return NULL;
191 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
192 if (exp == NULL)
return NULL;
194 uint64_t funcRva = exp->AddressOfFunctions;
195 funcRva += (this->
entryNum *
sizeof(DWORD));
203 if (this->parentDir == NULL || parentDir->
exportDir() == NULL) {
206 return sizeof(DWORD);
220 QTextStream(&ordStr) <<
"<ord: " << QString::number(val, 16) <<
">";
224 if (name == NULL)
return "";
225 return QString(name);
232 case NAME_RVA:
return "FuncNameRva";
239 DWORD *ptr = this->getFuncRvaPtr();
247 if (this->parentDir == NULL)
return 0;
248 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
249 if (exp == NULL)
return 0;
251 uint32_t ordinal =
static_cast<uint32_t
>(this->
entryNum) + exp->Base;
255 uint32_t ExportEntryWrapper::getFuncNameId()
257 if (this->parentDir == NULL)
return INVALID_ID;
259 WORD ord =
static_cast<WORD
>(this->
entryNum);
260 std::map<WORD, DWORD>::iterator found = parentDir->
ordToNameId.find(ord);
264 return found->second;
267 void* ExportEntryWrapper::getFuncNameRvaPtr()
269 uint32_t nameId = getFuncNameId();
272 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
273 if (exp == NULL)
return NULL;
275 if (nameId >= exp->NumberOfNames)
return NULL;
277 uint64_t nameAddrRVA = exp->AddressOfNames + (nameId *
sizeof(DWORD));
284 DWORD* valuePtr = (DWORD*) getFuncNameRvaPtr();
286 DWORD value = (*valuePtr);
287 return static_cast<offset_t>(value);
296 if (name == NULL)
return NULL;
303 if (this->parentDir == NULL)
return NULL;
304 IMAGE_EXPORT_DIRECTORY* exp = parentDir->
exportDir();
305 if (exp == NULL)
return NULL;
307 DWORD* funcRvaPtr = (DWORD*) this->getFuncRvaPtr();
308 if (funcRvaPtr == NULL)
return NULL;
311 if (strPtr == NULL)
return NULL;
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)