diff options
| author | Peter LaFosse <peter@vector35.com> | 2019-07-28 10:06:35 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2019-08-03 10:21:31 -0400 |
| commit | 8bda3399997c0af7fbba6c8a6cf3d22cdd6d0297 (patch) | |
| tree | 3093a1089d7a7c68763173b2dc5fd55c5650183d | |
| parent | 5581a6e80d4c0e983147517e23aeb51f3639fa28 (diff) | |
Fix symbol list issues. Vector35/binaryninja-api #1412
| -rw-r--r-- | binaryninjaapi.h | 1 | ||||
| -rw-r--r-- | binaryninjacore.h | 1 | ||||
| -rw-r--r-- | binaryview.cpp | 17 | ||||
| -rw-r--r-- | ui/symbollist.h | 16 |
4 files changed, 25 insertions, 10 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 68eee4db..e4af4672 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1517,6 +1517,7 @@ namespace BinaryNinja std::vector<Ref<Symbol>> GetSymbols(uint64_t start, uint64_t len, const NameSpace& nameSpace=NameSpace()); std::vector<Ref<Symbol>> GetSymbolsOfType(BNSymbolType type, const NameSpace& nameSpace=NameSpace()); std::vector<Ref<Symbol>> GetSymbolsOfType(BNSymbolType type, uint64_t start, uint64_t len, const NameSpace& nameSpace=NameSpace()); + std::vector<Ref<Symbol>> GetVisibleSymbols(const NameSpace& nameSpace=NameSpace()); void DefineAutoSymbol(Ref<Symbol> sym); void DefineAutoSymbolAndVariableOrFunction(Ref<Platform> platform, Ref<Symbol> sym, Ref<Type> type); diff --git a/binaryninjacore.h b/binaryninjacore.h index 7ae63459..8cf053e5 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -3124,6 +3124,7 @@ extern "C" BINARYNINJACOREAPI BNSymbol** BNGetSymbolsOfTypeInRange(BNBinaryView* view, BNSymbolType type, uint64_t start, uint64_t len, size_t* count, const BNNameSpace* nameSpace); BINARYNINJACOREAPI void BNFreeSymbolList(BNSymbol** syms, size_t count); + BINARYNINJACOREAPI BNSymbol** BNGetVisibleSymbols(BNBinaryView* view, size_t* count, const BNNameSpace* nameSpace); BINARYNINJACOREAPI void BNDefineAutoSymbol(BNBinaryView* view, BNSymbol* sym); BINARYNINJACOREAPI void BNUndefineAutoSymbol(BNBinaryView* view, BNSymbol* sym); diff --git a/binaryview.cpp b/binaryview.cpp index c62b434e..e44bca2b 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -1944,6 +1944,23 @@ vector<Ref<Symbol>> BinaryView::GetSymbolsOfType(BNSymbolType type, uint64_t sta } +std::vector<Ref<Symbol>> BinaryView::GetVisibleSymbols(const NameSpace& nameSpace) +{ + size_t count; + BNNameSpace ns = nameSpace.GetAPIObject(); + BNSymbol** syms = BNGetVisibleSymbols(m_object, &count, &ns); + NameSpace::FreeAPIObject(&ns); + + vector<Ref<Symbol>> result; + result.reserve(count); + for (size_t i = 0; i < count; i++) + result.push_back(new Symbol(BNNewSymbolReference(syms[i]))); + + BNFreeSymbolList(syms, count); + return result; +} + + void BinaryView::DefineAutoSymbol(Ref<Symbol> sym) { BNDefineAutoSymbol(m_object, sym->GetObject()); diff --git a/ui/symbollist.h b/ui/symbollist.h index c33472e9..8010d3e2 100644 --- a/ui/symbollist.h +++ b/ui/symbollist.h @@ -33,15 +33,13 @@ public: struct NamedObject { SymbolRef sym; - std::string archName; mutable std::string name; mutable bool named; - NamedObject() : sym(nullptr), archName(emptyArch), named(false) {} - NamedObject(SymbolRef s, std::string& a=emptyArch) : sym(s), archName(a), named(false) {} + NamedObject() : sym(nullptr), named(false) {} + NamedObject(SymbolRef s) : sym(s), named(false) {} NamedObject(const NamedObject& n) { sym = n.sym; - archName = n.archName; named = n.named; name = n.name; } @@ -49,7 +47,6 @@ public: NamedObject(const NamedObject&& n) { sym = std::move(n.sym); - archName = std::move(n.archName); name = std::move(n.name); named = n.named; } @@ -57,7 +54,6 @@ public: NamedObject& operator=(const NamedObject&& n) { sym = std::move(n.sym); - archName = std::move(n.archName); name = std::move(n.name); named = n.named; return *this; @@ -66,7 +62,6 @@ public: NamedObject& operator=(const NamedObject& n) { sym = n.sym; - archName = n.archName; name = n.name; named = n.named; return *this; @@ -116,9 +111,7 @@ private: enum SymbolListUpdateType { UnnamedFunctionAddedToSymbolList, - UnnamedFunctionRemovedFromSymbolList, UnnamedDataAddedToSymbolList, - UnnamedDataRemovedFromSymbolList, SymbolAddedToSymbolList, SymbolUpdatedInSymbolList, SymbolRemovedFromSymbolList @@ -153,7 +146,8 @@ private: BinaryViewRef m_data; std::set<std::string> m_archNames; std::vector<NamedObject> m_allSyms; - std::vector<NamedObject> m_curSyms; + std::vector<NamedObject> m_curSymsBySortOrder; + std::vector<NamedObject> m_curSymsByAddress; NamedObject m_currentSym; std::string m_filter; @@ -248,6 +242,8 @@ public: SortType getSortType() const { return m_sortType; } NamedObject getCurrentSym() const { return m_currentSym; } + bool checkTriggerFullUpdate(); + Q_SIGNALS: void afterListReset(); void beforeListReset(); |
