summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2021-04-06 11:13:51 -0400
committerBrian Potchik <brian@vector35.com>2021-04-06 11:13:51 -0400
commitccc46ee23e8160231b1de739380bd7d808ec433d (patch)
tree3208f74e38691890aa6d5a77b3448df86021c8cf
parent1f70e7091d198662ddebcd2398f0e0c1b2ecff24 (diff)
Add support for duplicate symbol handling.
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h1
-rw-r--r--binaryview.cpp14
-rw-r--r--examples/triage/imports.cpp11
-rw-r--r--python/binaryview.py13
-rw-r--r--python/types.py16
6 files changed, 7 insertions, 49 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index fbadbc07..5e74d17d 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1132,7 +1132,6 @@ __attribute__ ((format (printf, 1, 2)))
uint64_t GetOrdinal() const;
bool IsAutoDefined() const;
NameSpace GetNameSpace() const;
- std::vector<std::string> GetAliases() const;
static Ref<Symbol> ImportedFunctionFromImportAddressSymbol(Symbol* sym, uint64_t addr);
};
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 6bb9079d..f5ea815b 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -3819,7 +3819,6 @@ __attribute__ ((format (printf, 1, 2)))
BINARYNINJACOREAPI uint64_t BNGetSymbolAddress(BNSymbol* sym);
BINARYNINJACOREAPI uint64_t BNGetSymbolOrdinal(BNSymbol* sym);
BINARYNINJACOREAPI bool BNIsSymbolAutoDefined(BNSymbol* sym);
- BINARYNINJACOREAPI char** BNGetSymbolAliases(BNSymbol* sym, size_t* count);
BINARYNINJACOREAPI BNSymbol* BNGetSymbolByAddress(BNBinaryView* view, uint64_t addr, const BNNameSpace* nameSpace);
BINARYNINJACOREAPI BNSymbol* BNGetSymbolByRawName(BNBinaryView* view, const char* name, const BNNameSpace* nameSpace);
diff --git a/binaryview.cpp b/binaryview.cpp
index 444229c5..a803bf2e 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -341,20 +341,6 @@ Ref<Symbol> Symbol::ImportedFunctionFromImportAddressSymbol(Symbol* sym, uint64_
}
-vector<string> Symbol::GetAliases() const
-{
- vector<string> result;
- size_t count = 0;
- char** aliases = BNGetSymbolAliases(m_object, &count);
- result.reserve(count);
- for (size_t i = 0; i < count; i++)
- result.push_back(aliases[i]);
-
- BNFreeStringList(aliases, count);
- return result;
-}
-
-
AnalysisCompletionEvent::AnalysisCompletionEvent(BinaryView* view, const std::function<void()>& callback):
m_callback(callback)
{
diff --git a/examples/triage/imports.cpp b/examples/triage/imports.cpp
index d15b2c40..15e3c433 100644
--- a/examples/triage/imports.cpp
+++ b/examples/triage/imports.cpp
@@ -56,16 +56,7 @@ QVariant GenericImportsModel::data(const QModelIndex& index, int role) const
if (index.column() == 0)
return QString("0x") + QString::number(m_entries[index.row()]->GetAddress(), 16);
if (index.column() == m_nameCol)
- {
- QString name = QString::fromStdString(m_entries[index.row()]->GetFullName());
- if (name.endsWith("@GOT"))
- name = name.mid(0, name.size() - (int)strlen("@GOT"));
- else if (name.endsWith("@PLT"))
- name = name.mid(0, name.size() - (int)strlen("@PLT"));
- else if (name.endsWith("@IAT"))
- name = name.mid(0, name.size() - (int)strlen("@IAT"));
- return name;
- }
+ return QString::fromStdString(m_entries[index.row()]->GetFullName());
if (index.column() == m_moduleCol)
return getNamespace(m_entries[index.row()]);
if (index.column() == m_ordinalCol)
diff --git a/python/binaryview.py b/python/binaryview.py
index 85fcd353..1fde4bcd 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -27,7 +27,7 @@ import numbers
import json
import inspect
-from collections import OrderedDict
+from collections import defaultdict, OrderedDict
# Binary Ninja components
from binaryninja import _binaryninjacore as core
@@ -1912,13 +1912,10 @@ class BinaryView(object):
"""Dict of symbols (read-only)"""
count = ctypes.c_ulonglong(0)
syms = core.BNGetSymbols(self.handle, count, None)
- result = {}
+ result = defaultdict(list)
for i in range(0, count.value):
sym = types.Symbol(None, None, None, handle=core.BNNewSymbolReference(syms[i]))
- if sym.raw_name in result:
- result[sym.raw_name] = [result[sym.raw_name], sym]
- else:
- result[sym.raw_name] = sym
+ result[sym.raw_name].append(sym)
core.BNFreeSymbolList(syms, count.value)
return result
@@ -3875,7 +3872,7 @@ class BinaryView(object):
:Example:
>>> bv.get_symbols(0x1000200c, 1)
- [<ImportAddressSymbol: "KERNEL32!IsProcessorFeaturePresent@IAT" @ 0x1000200c>]
+ [<ImportAddressSymbol: "KERNEL32!IsProcessorFeaturePresent" @ 0x1000200c>]
>>>
"""
count = ctypes.c_ulonglong(0)
@@ -3906,7 +3903,7 @@ class BinaryView(object):
:Example:
>>> bv.get_symbols_of_type(SymbolType.ImportAddressSymbol, 0x10002028, 1)
- [<ImportAddressSymbol: "KERNEL32!GetCurrentThreadId@IAT" @ 0x10002028>]
+ [<ImportAddressSymbol: "KERNEL32!GetCurrentThreadId" @ 0x10002028>]
>>>
"""
if isinstance(sym_type, str):
diff --git a/python/types.py b/python/types.py
index 76f8c7f0..39378963 100644
--- a/python/types.py
+++ b/python/types.py
@@ -151,7 +151,7 @@ class TypeReferenceSource(object):
self._name = name
self._offset = offset
self._ref_type = ref_type
-
+
def __str__(self):
if self.ref_type == TypeReferenceType.DirectTypeReferenceType:
s = 'direct'
@@ -354,20 +354,6 @@ class Symbol(object):
def auto(self):
return core.BNIsSymbolAutoDefined(self.handle)
- @property
- def aliases(self):
- """
- List of aliases tied to this symbol.
- Aliases are the names of any other symbols that also happen to be at the same address.
- """
- result = []
- count = ctypes.c_ulonglong(0)
- aliases = core.BNGetSymbolAliases(self.handle, count)
- for i in range(count.value):
- result.append(aliases[i])
- core.BNFreeStringList(aliases, count)
- return result
-
class FunctionParameter(object):
def __init__(self, param_type, name = "", location = None):