diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-03-15 15:36:45 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-03-20 13:00:17 -0400 |
| commit | 7957fa580eb5f85bc2ce1deb7933f3b6db47a886 (patch) | |
| tree | fd8943602a5d9ebee974f6a758d39c24919eb77b | |
| parent | 0e73aadf4e787df9e376108eb82e297626045b11 (diff) | |
Add ordinals to symbols
| -rw-r--r-- | binaryninjaapi.h | 6 | ||||
| -rw-r--r-- | binaryninjacore.h | 3 | ||||
| -rw-r--r-- | binaryview.cpp | 15 | ||||
| -rw-r--r-- | python/types.py | 9 |
4 files changed, 24 insertions, 9 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 236bde65..212c035f 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1005,9 +1005,10 @@ namespace BinaryNinja { public: Symbol(BNSymbolType type, const std::string& shortName, const std::string& fullName, const std::string& rawName, - uint64_t addr, BNSymbolBinding binding=NoBinding, const NameSpace& nameSpace=NameSpace(DEFAULT_INTERNAL_NAMESPACE)); + uint64_t addr, BNSymbolBinding binding=NoBinding, const NameSpace& nameSpace=NameSpace(DEFAULT_INTERNAL_NAMESPACE), + uint64_t ordinal=0); Symbol(BNSymbolType type, const std::string& name, uint64_t addr, BNSymbolBinding binding=NoBinding, - const NameSpace& nameSpace=NameSpace(DEFAULT_INTERNAL_NAMESPACE)); + const NameSpace& nameSpace=NameSpace(DEFAULT_INTERNAL_NAMESPACE), uint64_t ordinal=0); Symbol(BNSymbol* sym); BNSymbolType GetType() const; @@ -1016,6 +1017,7 @@ namespace BinaryNinja std::string GetFullName() const; std::string GetRawName() const; uint64_t GetAddress() const; + uint64_t GetOrdinal() const; bool IsAutoDefined() const; NameSpace GetNameSpace() const; diff --git a/binaryninjacore.h b/binaryninjacore.h index 39f39982..d4a24f15 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -2944,7 +2944,7 @@ extern "C" // Symbols BINARYNINJACOREAPI BNSymbol* BNCreateSymbol(BNSymbolType type, const char* shortName, const char* fullName, - const char* rawName, uint64_t addr, BNSymbolBinding binding, const BNNameSpace* nameSpace); + const char* rawName, uint64_t addr, BNSymbolBinding binding, const BNNameSpace* nameSpace, uint64_t ordinal); BINARYNINJACOREAPI BNSymbol* BNNewSymbolReference(BNSymbol* sym); BINARYNINJACOREAPI void BNFreeSymbol(BNSymbol* sym); BINARYNINJACOREAPI BNSymbolType BNGetSymbolType(BNSymbol* sym); @@ -2954,6 +2954,7 @@ extern "C" BINARYNINJACOREAPI char* BNGetSymbolFullName(BNSymbol* sym); BINARYNINJACOREAPI char* BNGetSymbolRawName(BNSymbol* sym); BINARYNINJACOREAPI uint64_t BNGetSymbolAddress(BNSymbol* sym); + BINARYNINJACOREAPI uint64_t BNGetSymbolOrdinal(BNSymbol* sym); BINARYNINJACOREAPI bool BNIsSymbolAutoDefined(BNSymbol* sym); BINARYNINJACOREAPI BNSymbol* BNGetSymbolByAddress(BNBinaryView* view, uint64_t addr, const BNNameSpace* nameSpace); diff --git a/binaryview.cpp b/binaryview.cpp index b4ca2fd9..3bf61f34 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -169,18 +169,19 @@ BinaryDataNotification::BinaryDataNotification() Symbol::Symbol(BNSymbolType type, const string& shortName, const string& fullName, const string& rawName, uint64_t addr, - BNSymbolBinding binding, const NameSpace& nameSpace) + BNSymbolBinding binding, const NameSpace& nameSpace, uint64_t ordinal) { BNNameSpace ns = nameSpace.GetAPIObject(); - m_object = BNCreateSymbol(type, shortName.c_str(), fullName.c_str(), rawName.c_str(), addr, binding, &ns); + m_object = BNCreateSymbol(type, shortName.c_str(), fullName.c_str(), rawName.c_str(), addr, binding, &ns, ordinal); NameSpace::FreeAPIObject(&ns); } -Symbol::Symbol(BNSymbolType type, const std::string& name, uint64_t addr, BNSymbolBinding binding, const NameSpace& nameSpace) +Symbol::Symbol(BNSymbolType type, const std::string& name, uint64_t addr, BNSymbolBinding binding, + const NameSpace& nameSpace, uint64_t ordinal) { BNNameSpace ns = nameSpace.GetAPIObject(); - m_object = BNCreateSymbol(type, name.c_str(), name.c_str(), name.c_str(), addr, binding, &ns); + m_object = BNCreateSymbol(type, name.c_str(), name.c_str(), name.c_str(), addr, binding, &ns, ordinal); NameSpace::FreeAPIObject(&ns); } @@ -246,6 +247,12 @@ uint64_t Symbol::GetAddress() const } +uint64_t Symbol::GetOrdinal() const +{ + return BNGetSymbolOrdinal(m_object); +} + + bool Symbol::IsAutoDefined() const { return BNIsSymbolAutoDefined(m_object); diff --git a/python/types.py b/python/types.py index f1c032b3..70a9d6cc 100644 --- a/python/types.py +++ b/python/types.py @@ -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, binding=None, namespace=None): + def __init__(self, sym_type, addr, short_name, full_name=None, raw_name=None, handle=None, binding=None, namespace=None, ordinal=0): if handle is not None: self.handle = core.handle_of_type(handle, core.BNSymbol) else: @@ -170,7 +170,7 @@ class Symbol(object): namespace = NameSpace(namespace) if isinstance(namespace, NameSpace): namespace = namespace._get_core_struct() - self.handle = core.BNCreateSymbol(sym_type, short_name, full_name, raw_name, addr, binding, namespace) + self.handle = core.BNCreateSymbol(sym_type, short_name, full_name, raw_name, addr, binding, namespace, ordinal) def __del__(self): core.BNFreeSymbol(self.handle) @@ -229,6 +229,11 @@ class Symbol(object): return core.BNGetSymbolAddress(self.handle) @property + def ordinal(self): + """Symbol ordinal (read-only)""" + return core.BNGetSymbolOrdinal(self.handle) + + @property def auto(self): return core.BNIsSymbolAutoDefined(self.handle) |
