summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2019-07-28 10:06:35 -0400
committerPeter LaFosse <peter@vector35.com>2019-08-03 10:21:31 -0400
commit8bda3399997c0af7fbba6c8a6cf3d22cdd6d0297 (patch)
tree3093a1089d7a7c68763173b2dc5fd55c5650183d
parent5581a6e80d4c0e983147517e23aeb51f3639fa28 (diff)
Fix symbol list issues. Vector35/binaryninja-api #1412
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h1
-rw-r--r--binaryview.cpp17
-rw-r--r--ui/symbollist.h16
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();