Progress, autoanalysis, and update for Qt 6.4
This commit is contained in:
parent
6984798640
commit
4e03ca0ac4
|
@ -31,7 +31,9 @@ class TypeTapperAnalysis(angr.Analysis):
|
|||
|
||||
def _analyze_active_flow(self):
|
||||
node: CFGNode
|
||||
for node in self._cfg.graph.nodes():
|
||||
for i, node in enumerate(self._cfg.graph.nodes()):
|
||||
progress = i / len(self._cfg.graph) * 100
|
||||
self._update_progress(progress, "Analyzing " + str(node))
|
||||
block: Block = node.block
|
||||
if block is not None:
|
||||
self._engine.handle_vex_block(block.vex)
|
||||
|
@ -42,6 +44,7 @@ class TypeTapperAnalysis(angr.Analysis):
|
|||
proc.analyze(node.addr)
|
||||
|
||||
def _analyze_passive_flow(self):
|
||||
self._update_progress(99.99, "Analyzing passive flow")
|
||||
queue = OrderedDict()
|
||||
for block_addr in self.manager.block_info.keys():
|
||||
queue[block_addr] = None
|
||||
|
|
|
@ -219,7 +219,7 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
|
|||
qnode.setSelected(True)
|
||||
for other_qnode in self.qnodes:
|
||||
other_qnode.setAcceptHoverEvents(False)
|
||||
other_qnode.setAcceptedMouseButtons(Qt.MouseButton.NoButton | 0)
|
||||
other_qnode.setAcceptedMouseButtons(Qt.MouseButton.NoButton | Qt.MouseButton.NoButton)
|
||||
if qnode is other_qnode:
|
||||
other_qnode.setOpacity(0.8)
|
||||
else:
|
||||
|
@ -273,7 +273,7 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
|
|||
def end_expand(self, accepted_qnode: Optional['PropChartHG']=None):
|
||||
for qnode in self.qnodes:
|
||||
qnode.setAcceptHoverEvents(True)
|
||||
qnode.setAcceptedMouseButtons(Qt.MouseButton.AllButtons | 0)
|
||||
qnode.setAcceptedMouseButtons(Qt.MouseButton.AllButtons | Qt.MouseButton.AllButtons)
|
||||
qnode.setOpacity(1)
|
||||
for edge in self.qedges:
|
||||
edge.setOpacity(1)
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import threading
|
||||
from typing import Optional
|
||||
|
||||
from angr.analyses.decompiler.structured_codegen.c import CVariable
|
||||
from angrmanagement.data.jobs.job import Job
|
||||
from angrmanagement.plugins import BasePlugin
|
||||
from angrmanagement.ui.views import CodeView
|
||||
|
||||
|
@ -15,14 +17,12 @@ class TypeTapper(BasePlugin):
|
|||
super().__init__(workspace)
|
||||
self.kp: Optional[TypeTapperManager] = None
|
||||
|
||||
MENU_BUTTONS = ["TypeTapper initial analysis"]
|
||||
def handle_project_initialization(self):
|
||||
threading.Thread(target=self._startup).start()
|
||||
|
||||
def handle_click_menu(self, idx):
|
||||
assert idx == 0
|
||||
cfg = self.workspace.main_instance.cfg
|
||||
tt = self.workspace.main_instance.project.analyses[TypeTapperAnalysis](cfg)
|
||||
self.kp = tt.manager
|
||||
self._start(self.kp.lookup_reg(0x4144a5, "rdi"))
|
||||
def _startup(self):
|
||||
self.workspace.main_instance.join_all_jobs(0.200)
|
||||
self.workspace.main_instance.add_job(TypeTapperStartupJob(self))
|
||||
|
||||
def build_context_menu_node(self, node):
|
||||
# this is bad lol
|
||||
|
@ -56,3 +56,13 @@ class TypeTapper(BasePlugin):
|
|||
)
|
||||
self.workspace.add_view(view)
|
||||
self.workspace.raise_view(view)
|
||||
|
||||
class TypeTapperStartupJob(Job):
|
||||
def __init__(self, plugin: TypeTapper, **kwargs):
|
||||
super().__init__("TypeTapper", **kwargs)
|
||||
self.plugin = plugin
|
||||
|
||||
def _run(self, inst):
|
||||
cfg = inst.cfg
|
||||
tt = inst.project.analyses[TypeTapperAnalysis](cfg, progress_callback=self._progress_callback)
|
||||
self.plugin.kp = tt.manager
|
||||
|
|
Loading…
Reference in New Issue