diff options
| author | Peter LaFosse <peter@vector35.com> | 2018-10-05 16:55:49 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2018-10-05 16:55:49 -0400 |
| commit | fd2ca70e3e2a687c58b65da4af50f0ab4a4a7b07 (patch) | |
| tree | bfa87e5b7cba04f05ae907649c2eb62c4f56bafb | |
| parent | 7dcf43151664aa44e1685d30549f3793f28b564a (diff) | |
Expose SymbolBinding API
| -rw-r--r-- | binaryninjaapi.h | 6 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | binaryview.cpp | 15 | ||||
| -rw-r--r-- | python/types.py | 13 |
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) |
