1
0
Fork 0
x64dbg/src/dbg/addrinfo.cpp

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;
}