def setAddr(self, address): if self.current_focused_addr == address: return else: idc.jumpto(address) f = idaapi.get_func(address) # print(f) if f == None: print("not found function address...") return g = idaapi.FlowChart(f, flags=idaapi.FC_PREDS) target_bb_id = get_bb_id(g, address) # print(target_bb_id) if self.current_block_start_ea == f.start_ea and self.current_bb_id == target_bb_id: return else: self.recoverColor() self.current_block_start_ea = f.start_ea self.current_focused_addr = address self.current_bb_id = target_bb_id self.changeColor() ida_graph.refresh_viewer(self.widget_a)
def _fit_graph(self, graph): if graph: gv = graph.GetWidget() ida_graph.viewer_fit_window(gv) ida_graph.refresh_viewer(gv) return True return False
def _dock_widgets(self, graph, dockpos=kw.DP_RIGHT): if graph: gv = graph.GetWidget() kw.set_dock_pos(kw.get_widget_title(gv), self.title, dockpos) gli = ida_moves.graph_location_info_t() if ida_graph.viewer_get_gli(gli, gv): gli.zoom = 0 # auto-position ida_graph.viewer_set_gli(gv, gli, ida_graph.GLICTL_CENTER) ida_graph.refresh_viewer(gv) return True return False
def _center_graph(self): """ Center the sub-tree graph, and set an appropriate zoom level. """ widget = self.GetWidget() gv = ida_graph.get_graph_viewer(widget) g = ida_graph.get_viewer_graph(gv) ida_graph.viewer_fit_window(gv) ida_graph.refresh_viewer(gv) gli = ida_moves.graph_location_info_t() ida_graph.viewer_get_gli(gli, gv, ida_graph.GLICTL_CENTER) if gli.zoom > 1.5: gli.zoom = 1.5 else: gli.zoom = gli.zoom * 0.9 ida_graph.viewer_set_gli(gv, gli, ida_graph.GLICTL_CENTER)