summaryrefslogtreecommitdiff
path: root/python/examples/triage/imports.py
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-03-15 15:48:41 -0400
committerRusty Wagner <rusty@vector35.com>2019-03-20 13:00:17 -0400
commitbdaf3e65c7ea19da175656a02e8d16af5f13becc (patch)
tree21c260ea11de825dcfb12723956cdc17efb08902 /python/examples/triage/imports.py
parent7957fa580eb5f85bc2ce1deb7933f3b6db47a886 (diff)
Updated triage example
Diffstat (limited to 'python/examples/triage/imports.py')
-rw-r--r--python/examples/triage/imports.py37
1 files changed, 29 insertions, 8 deletions
diff --git a/python/examples/triage/imports.py b/python/examples/triage/imports.py
index 2b2ed253..293ed239 100644
--- a/python/examples/triage/imports.py
+++ b/python/examples/triage/imports.py
@@ -1,7 +1,8 @@
from PySide2.QtWidgets import QTreeView
-from PySide2.QtCore import Qt, QAbstractItemModel, QModelIndex
+from PySide2.QtCore import Qt, QAbstractItemModel, QModelIndex, QSize
from binaryninja.enums import SymbolType
import binaryninjaui
+from binaryninjaui import ViewFrame
class GenericImportsModel(QAbstractItemModel):
@@ -11,20 +12,24 @@ class GenericImportsModel(QAbstractItemModel):
self.has_modules = False
self.name_col = 1
self.module_col = None
+ self.ordinal_col = None
self.total_cols = 2
for sym in data.get_symbols_of_type(SymbolType.ImportAddressSymbol):
self.entries.append(sym)
if str(sym.namespace) != "BNINTERNALNAMESPACE":
self.has_modules = True
if self.has_modules:
- self.name_col = 2
+ self.name_col = 3
self.module_col = 1
- self.total_cols = 3
+ self.ordinal_col = 2
+ self.total_cols = 4
def columnCount(self, parent):
return self.total_cols
def rowCount(self, parent):
+ if parent.isValid():
+ return 0
return len(self.entries)
def data(self, index, role):
@@ -35,7 +40,7 @@ class GenericImportsModel(QAbstractItemModel):
if index.column() == 0:
return "0x%x" % self.entries[index.row()].address
if index.column() == self.name_col:
- name = self.entries[index.row()].name
+ name = self.entries[index.row()].full_name
if name.endswith("@GOT"):
name = name[:-len("@GOT")]
elif name.endswith("@PLT"):
@@ -45,6 +50,8 @@ class GenericImportsModel(QAbstractItemModel):
return name
if index.column() == self.module_col:
return self.getNamespace(self.entries[index.row()])
+ if index.column() == self.ordinal_col:
+ return str(self.entries[index.row()].ordinal)
return None
def headerData(self, section, orientation, role):
@@ -58,6 +65,8 @@ class GenericImportsModel(QAbstractItemModel):
return "Name"
if section == self.module_col:
return "Module"
+ if section == self.ordinal_col:
+ return "Ordinal"
return None
def index(self, row, col, parent):
@@ -88,9 +97,11 @@ class GenericImportsModel(QAbstractItemModel):
if col == 0:
self.entries.sort(key = lambda sym: sym.address, reverse = order != Qt.AscendingOrder)
elif col == self.name_col:
- self.entries.sort(key = lambda sym: sym.name, reverse = order != Qt.AscendingOrder)
+ self.entries.sort(key = lambda sym: sym.full_name, reverse = order != Qt.AscendingOrder)
elif col == self.module_col:
self.entries.sort(key = lambda sym: self.getNamespace(sym), reverse = order != Qt.AscendingOrder)
+ elif col == self.ordinal_col:
+ self.entries.sort(key = lambda sym: sym.ordinal, reverse = order != Qt.AscendingOrder)
self.endResetModel()
@@ -106,12 +117,22 @@ class ImportsWidget(QTreeView):
self.setUniformRowHeights(True)
self.setSortingEnabled(True)
self.sortByColumn(0, Qt.AscendingOrder)
+ if self.model.ordinal_col is not None:
+ self.setColumnWidth(self.model.ordinal_col, 55)
+ self.setMinimumSize(QSize(100, 196))
self.setFont(binaryninjaui.getMonospaceFont(self))
- self.clicked.connect(self.importSelected)
+ self.selectionModel().currentChanged.connect(self.importSelected)
+ self.doubleClicked.connect(self.importDoubleClicked)
- def importSelected(self, index):
- sym = self.model.getSymbol(index)
+ def importSelected(self, cur, prev):
+ sym = self.model.getSymbol(cur)
if sym is not None:
self.view.setCurrentOffset(sym.address)
+
+ def importDoubleClicked(self, cur):
+ sym = self.model.getSymbol(cur)
+ if sym is not None:
+ viewFrame = ViewFrame.viewFrameForWidget(self)
+ viewFrame.navigate("Linear:" + viewFrame.getCurrentDataType(), sym.address)