1
0
Fork 0

DBG: refactor SymbolInfo to use VA instead of RVA

This commit is contained in:
Duncan Ogilvie 2018-01-09 23:16:45 +01:00
parent ffc168f44d
commit 66017a7442
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
6 changed files with 12 additions and 11 deletions

View File

@ -1478,7 +1478,7 @@ extern "C" DLL_EXPORT duint _dbg_sendmessage(DBGMSG type, void* param1, void* pa
//TODO: hack^2
auto real = (SymbolInfo*)param1;
auto fake = (SYMBOLINFO*)param2;
fake->addr = real->addr;
fake->addr = real->va;
fake->decoratedSymbol = (char*)real->decoratedName.c_str();
fake->undecoratedSymbol = (char*)real->undecoratedName.c_str();
fake->isImported = strncmp(fake->decoratedSymbol, "__imp_", 6) == 0; //TODO: properly handle this

View File

@ -65,7 +65,7 @@ void SymEnum(duint Base, CBSYMBOLENUM EnumCallback, void* UserData)
SYMBOLINFO curSymbol;
memset(&curSymbol, 0, sizeof(SYMBOLINFO));
curSymbol.addr = Base + info.addr;
curSymbol.addr = info.va;
curSymbol.decoratedSymbol = cbData.decoratedSymbol.data();
curSymbol.undecoratedSymbol = cbData.undecoratedSymbol.data();
strncpy_s(curSymbol.decoratedSymbol, MAX_SYM_NAME, info.decoratedName.c_str(), _TRUNCATE);
@ -282,7 +282,7 @@ bool SymAddrFromName(const char* Name, duint* Address)
SymbolInfo symInfo;
if(modInfo->symbols->findSymbolByName(name, symInfo, true))
{
*Address = base + symInfo.addr;
*Address = symInfo.va;
return true;
}
}

View File

@ -9,7 +9,7 @@
struct SymbolInfo
{
duint addr;
duint va;
duint size;
int32 disp;
String decoratedName;

View File

@ -122,7 +122,7 @@ bool SymbolSourceDIA::loadSymbolsAsync(String path)
symInfo.undecoratedName = sym.undecoratedName;
symInfo.size = sym.size;
symInfo.disp = sym.disp;
symInfo.addr = sym.virtualAddress;
symInfo.va = _imageBase + sym.virtualAddress;
symInfo.publicSymbol = sym.publicSymbol;
// Check if we already have it inside, private symbols have priority over public symbols.
@ -130,7 +130,7 @@ bool SymbolSourceDIA::loadSymbolsAsync(String path)
{
ScopedSpinLock lock(_lockSymbols);
auto it = _symAddrs.find(symInfo.addr);
auto it = _symAddrs.find(sym.virtualAddress);
if(it != _symAddrs.end())
{
if(_symData[it->second].publicSymbol == true && symInfo.publicSymbol == false)
@ -142,7 +142,7 @@ bool SymbolSourceDIA::loadSymbolsAsync(String path)
else
{
_symData.push_back(symInfo);
_symAddrs.insert({ symInfo.addr, _symData.size() - 1 });
_symAddrs.insert({ sym.virtualAddress, _symData.size() - 1 });
}
}
@ -344,7 +344,7 @@ bool SymbolSourceDIA::findSymbolExactOrLower(duint rva, SymbolInfo & symInfo)
if(it != _symAddrs.end())
{
symInfo = _symData[it->second];
symInfo.disp = (int32_t)(rva - symInfo.addr);
symInfo.disp = (int32_t)(rva - (symInfo.va - _imageBase));
return true;
}

View File

@ -48,7 +48,7 @@ bool SymbolFromAddressExactOrLower(duint address, SymbolInfo & symInfo)
return false;
}
bool SymbolFromAddr(duint addr, SymbolInfo & symbol)
/*bool SymbolFromAddr(duint addr, SymbolInfo & symbol)
{
SHARED_ACQUIRE(LockSymbolCache);
auto foundR = symbolRange.find(Range(addr, addr));
@ -172,3 +172,4 @@ bool LineDelRange(duint addr)
lineRange.erase(foundR);
return true;
}
*/

View File

@ -7,7 +7,7 @@
bool SymbolFromAddressExact(duint address, SymbolInfo & symInfo);
bool SymbolFromAddressExactOrLower(duint address, SymbolInfo & symInfo);
bool SymbolFromAddr(duint addr, SymbolInfo & symbol);
/*bool SymbolFromAddr(duint addr, SymbolInfo & symbol);
bool SymbolFromName(const char* name, SymbolInfo & symbol);
bool SymbolAdd(const SymbolInfo & symbol);
bool SymbolAddRange(duint start, duint size);
@ -17,4 +17,4 @@ bool LineFromAddr(duint addr, LineInfo & line);
bool LineFromName(const char* sourceFile, int lineNumber, LineInfo & line);
bool LineAdd(const LineInfo & line);
bool LineAddRange(duint start, duint size);
bool LineDelRange(duint addr);
bool LineDelRange(duint addr);*/