55 lines
1.4 KiB
C++
55 lines
1.4 KiB
C++
/**
|
|
@file addrinfo.cpp
|
|
|
|
@brief Implements the addrinfo class.
|
|
*/
|
|
|
|
#include "addrinfo.h"
|
|
#include "debugger.h"
|
|
#include "memory.h"
|
|
#include "module.h"
|
|
#include "value.h"
|
|
|
|
///api functions
|
|
bool apienumexports(duint base, const EXPORTENUMCALLBACK & cbEnum)
|
|
{
|
|
SHARED_ACQUIRE(LockModules);
|
|
auto modinfo = ModInfoFromAddr(base);
|
|
if(!modinfo)
|
|
return false;
|
|
|
|
char modname[MAX_MODULE_SIZE] = "";
|
|
sprintf_s(modname, "%s%s", modinfo->name, modinfo->extension);
|
|
|
|
for(auto & modExport : modinfo->exports)
|
|
{
|
|
if(modExport.forwarded)
|
|
{
|
|
duint remote_addr;
|
|
if(valfromstring(modExport.forwardName.c_str(), &remote_addr))
|
|
cbEnum(base, modname, modExport.name.c_str(), remote_addr);
|
|
}
|
|
else
|
|
{
|
|
cbEnum(base, modname, modExport.name.c_str(), modExport.rva + base);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool apienumimports(duint base, const IMPORTENUMCALLBACK & cbEnum)
|
|
{
|
|
SHARED_ACQUIRE(LockModules);
|
|
auto modinfo = ModInfoFromAddr(base);
|
|
if(!modinfo)
|
|
return false;
|
|
|
|
char modname[MAX_MODULE_SIZE] = "";
|
|
sprintf_s(modname, "%s%s", modinfo->name, modinfo->extension);
|
|
|
|
for(auto & modImport : modinfo->imports)
|
|
{
|
|
cbEnum(base, modImport.iatRva + base, modImport.name.c_str(), modinfo->importModules.at(modImport.moduleIndex).c_str());
|
|
}
|
|
return true;
|
|
} |