diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-03-15 15:48:41 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-03-20 13:00:17 -0400 |
| commit | bdaf3e65c7ea19da175656a02e8d16af5f13becc (patch) | |
| tree | 21c260ea11de825dcfb12723956cdc17efb08902 /python/examples/triage/imports.py | |
| parent | 7957fa580eb5f85bc2ce1deb7933f3b6db47a886 (diff) | |
Updated triage example
Diffstat (limited to 'python/examples/triage/imports.py')
| -rw-r--r-- | python/examples/triage/imports.py | 37 |
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) |
