summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-03-15 15:36:45 -0400
committerRusty Wagner <rusty@vector35.com>2019-03-20 13:00:17 -0400
commit7957fa580eb5f85bc2ce1deb7933f3b6db47a886 (patch)
treefd8943602a5d9ebee974f6a758d39c24919eb77b
parent0e73aadf4e787df9e376108eb82e297626045b11 (diff)
Add ordinals to symbols
-rw-r--r--binaryninjaapi.h6
-rw-r--r--binaryninjacore.h3
-rw-r--r--binaryview.cpp15
-rw-r--r--python/types.py9
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)