summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2018-10-05 16:55:49 -0400
committerPeter LaFosse <peter@vector35.com>2018-10-05 16:55:49 -0400
commitfd2ca70e3e2a687c58b65da4af50f0ab4a4a7b07 (patch)
treebfa87e5b7cba04f05ae907649c2eb62c4f56bafb
parent7dcf43151664aa44e1685d30549f3793f28b564a (diff)
Expose SymbolBinding API
-rw-r--r--binaryninjaapi.h6
-rw-r--r--binaryninjacore.h3
-rw-r--r--binaryview.cpp15
-rw-r--r--python/types.py13
4 files changed, 27 insertions, 10 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 5ebfd92e..7c39c5d3 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1001,11 +1001,13 @@ namespace BinaryNinja
class Symbol: public CoreRefCountObject<BNSymbol, BNNewSymbolReference, BNFreeSymbol>
{
public:
- Symbol(BNSymbolType type, const std::string& shortName, const std::string& fullName, const std::string& rawName, uint64_t addr);
- Symbol(BNSymbolType type, const std::string& name, uint64_t addr);
+ Symbol(BNSymbolType type, const std::string& shortName, const std::string& fullName, const std::string& rawName,
+ uint64_t addr, BNSymbolBinding binding=NoBinding);
+ Symbol(BNSymbolType type, const std::string& name, uint64_t addr, BNSymbolBinding binding=NoBinding);
Symbol(BNSymbol* sym);
BNSymbolType GetType() const;
+ BNSymbolBinding GetBinding() const;
std::string GetShortName() const;
std::string GetFullName() const;
std::string GetRawName() const;
diff --git a/binaryninjacore.h b/binaryninjacore.h
index ae4b27a3..9a90fb6f 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -2827,10 +2827,11 @@ extern "C"
// Symbols
BINARYNINJACOREAPI BNSymbol* BNCreateSymbol(BNSymbolType type, const char* shortName, const char* fullName,
- const char* rawName, uint64_t addr);
+ const char* rawName, uint64_t addr, BNSymbolBinding binding);
BINARYNINJACOREAPI BNSymbol* BNNewSymbolReference(BNSymbol* sym);
BINARYNINJACOREAPI void BNFreeSymbol(BNSymbol* sym);
BINARYNINJACOREAPI BNSymbolType BNGetSymbolType(BNSymbol* sym);
+ BINARYNINJACOREAPI BNSymbolBinding BNGetSymbolBinding(BNSymbol* sym);
BINARYNINJACOREAPI BNNameSpace BNGetSymbolNameSpace(BNSymbol* sym);
BINARYNINJACOREAPI char* BNGetSymbolShortName(BNSymbol* sym);
BINARYNINJACOREAPI char* BNGetSymbolFullName(BNSymbol* sym);
diff --git a/binaryview.cpp b/binaryview.cpp
index 6cd433b3..2dc7398a 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -168,15 +168,16 @@ BinaryDataNotification::BinaryDataNotification()
}
-Symbol::Symbol(BNSymbolType type, const string& shortName, const string& fullName, const string& rawName, uint64_t addr)
+Symbol::Symbol(BNSymbolType type, const string& shortName, const string& fullName, const string& rawName, uint64_t addr,
+ BNSymbolBinding binding)
{
- m_object = BNCreateSymbol(type, shortName.c_str(), fullName.c_str(), rawName.c_str(), addr);
+ m_object = BNCreateSymbol(type, shortName.c_str(), fullName.c_str(), rawName.c_str(), addr, binding);
}
-Symbol::Symbol(BNSymbolType type, const std::string& name, uint64_t addr)
+Symbol::Symbol(BNSymbolType type, const std::string& name, uint64_t addr, BNSymbolBinding binding)
{
- m_object = BNCreateSymbol(type, name.c_str(), name.c_str(), name.c_str(), addr);
+ m_object = BNCreateSymbol(type, name.c_str(), name.c_str(), name.c_str(), addr, binding);
}
@@ -192,6 +193,12 @@ BNSymbolType Symbol::GetType() const
}
+BNSymbolBinding Symbol::GetBinding() const
+{
+ return BNGetSymbolBinding(m_object);
+}
+
+
NameSpace Symbol::GetNameSpace() const
{
BNNameSpace name = BNGetSymbolNameSpace(m_object);
diff --git a/python/types.py b/python/types.py
index a7973fd7..72a39378 100644
--- a/python/types.py
+++ b/python/types.py
@@ -26,7 +26,7 @@ import ctypes
# Binary Ninja components
import binaryninja
from binaryninja import _binaryninjacore as core
-from binaryninja.enums import SymbolType, TypeClass, NamedTypeReferenceClass, InstructionTextTokenType, StructureType, ReferenceType, VariableSourceType
+from binaryninja.enums import SymbolType, SymbolBinding, TypeClass, NamedTypeReferenceClass, InstructionTextTokenType, StructureType, ReferenceType, VariableSourceType
# 2-3 compatibility
from binaryninja import range
@@ -154,7 +154,7 @@ class Symbol(object):
ExternalSymbol Symbols for data and code that reside outside the BinaryView
=========================== ==============================================================
"""
- def __init__(self, sym_type, addr, short_name, full_name = None, raw_name = None, handle = None):
+ def __init__(self, sym_type, addr, short_name, full_name=None, raw_name=None, handle=None, binding=None):
if handle is not None:
self.handle = core.handle_of_type(handle, core.BNSymbol)
else:
@@ -164,7 +164,9 @@ class Symbol(object):
full_name = short_name
if raw_name is None:
raw_name = full_name
- self.handle = core.BNCreateSymbol(sym_type, short_name, full_name, raw_name, addr)
+ if binding is None:
+ binding = SymbolBinding.NoBinding
+ self.handle = core.BNCreateSymbol(sym_type, short_name, full_name, raw_name, addr, binding)
def __del__(self):
core.BNFreeSymbol(self.handle)
@@ -185,6 +187,11 @@ class Symbol(object):
return SymbolType(core.BNGetSymbolType(self.handle))
@property
+ def binding(self):
+ """Symbol binding (read-only)"""
+ return SymbolBinding(core.BNGetSymbolBinding(self.handle))
+
+ @property
def namespace(self):
"""Symbol namespace (read-only)"""
ns = core.BNGetSymbolNameSpace(self.handle)