Add support for enumerating a range of symbols
This commit is contained in:
parent
7e17c2ccd2
commit
ee5aa0a264
|
@ -145,7 +145,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// only call if isOpen && !isLoading
|
// only call if isOpen && !isLoading
|
||||||
virtual void enumSymbols(const CbEnumSymbol & cbEnum)
|
virtual void enumSymbols(const CbEnumSymbol & cbEnum, duint beginRva = 0, duint endRva = -1)
|
||||||
{
|
{
|
||||||
// Stub
|
// Stub
|
||||||
}
|
}
|
||||||
|
|
|
@ -470,14 +470,32 @@ bool SymbolSourceDIA::findSymbolExactOrLower(duint rva, SymbolInfo & symInfo)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbolSourceDIA::enumSymbols(const CbEnumSymbol & cbEnum)
|
void SymbolSourceDIA::enumSymbols(const CbEnumSymbol & cbEnum, duint beginRva, duint endRva)
|
||||||
{
|
{
|
||||||
if(!_symbolsLoaded)
|
if(!_symbolsLoaded)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for(auto & it : _symAddrMap)
|
if(_symAddrMap.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(beginRva > endRva)
|
||||||
|
return;
|
||||||
|
|
||||||
|
AddrIndex find;
|
||||||
|
find.addr = beginRva;
|
||||||
|
find.index = -1;
|
||||||
|
auto it = std::lower_bound(_symAddrMap.begin(), _symAddrMap.end(), find);
|
||||||
|
if(it == _symAddrMap.end())
|
||||||
|
return;
|
||||||
|
|
||||||
|
for(; it != _symAddrMap.end(); it++)
|
||||||
{
|
{
|
||||||
const SymbolInfo & sym = _symData[it.index];
|
const SymbolInfo & sym = _symData[it->index];
|
||||||
|
if(sym.rva > endRva)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(!cbEnum(sym))
|
if(!cbEnum(sym))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -116,7 +116,7 @@ public:
|
||||||
|
|
||||||
virtual bool findSymbolExactOrLower(duint rva, SymbolInfo & symInfo) override;
|
virtual bool findSymbolExactOrLower(duint rva, SymbolInfo & symInfo) override;
|
||||||
|
|
||||||
virtual void enumSymbols(const CbEnumSymbol & cbEnum) override;
|
virtual void enumSymbols(const CbEnumSymbol & cbEnum, uint64_t beginRva, uint64_t endRva) override;
|
||||||
|
|
||||||
virtual bool findSourceLineInfo(duint rva, LineInfo & lineInfo) override;
|
virtual bool findSourceLineInfo(duint rva, LineInfo & lineInfo) override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue