def OnRefresh(self): nodes = {} self.Clear() # nodes for n in xrange(len(self.items)): item = self.items[n] node_label = self.get_node_label(n) hl, color = self.get_node_color(n) nid = self.AddNode(("%s" % node_label, color)) nodes[item] = nid if hl: widget = ida_kernwin.find_widget(self._title) ida_graph.viewer_center_on(widget, nid) # edges for n in xrange(len(self.items)): item = self.items[n] for i in xrange(self.nsucc(n)): t = self.succ(n, i) # original code removed, edges may not have labels in IDA self.AddEdge(nodes[item], nodes[self.items[t]]) return True
def center(self): curnode = ida_graph.viewer_get_curnode(self.graph_viewer) if not (self.prev_node == curnode): ida_graph.viewer_center_on(self.graph_viewer, curnode) self.prev_node = curnode return curnode
def OnRefresh(self): """ Event called when the graph is refreshed or first created. From this event you are supposed to create nodes and edges. This callback is mandatory. @note: ***It is important to clear previous nodes before adding nodes.*** @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. """ self.nodes = {} self.Clear() # nodes for n in range(len(self.items)): item = self.items[n] focus_node, hl, color = self.get_node_info(n) node_label = self.get_node_label(n, highlight_node=hl) nid = self.AddNode((node_label, color)) p = idaapi.node_info_t() p.frame_color = 0x000000 if hl: p.frame_color = self.CL_NODE_HIGHLIGHT if focus_node: p.frame_color = self.CL_NODE_FOCUS self.SetNodeInfo(nid, p, idaapi.NIF_FRAME_COLOR) self.nodes[item.obj_id] = nid if self.center_node and focus_node: widget = ida_kernwin.find_widget(self._title) ida_graph.viewer_center_on(widget, nid) # edges for n in range(len(self.items)): item = self.items[n] for i in range(self.nsucc(n)): t = self.succ(n, i) self.AddEdge(self.nodes[item.obj_id], self.nodes[self.items[t].obj_id]) return True
def OnRefresh(self): """ @return: 返回 True 告诉 graph viewer 使用新的 items """ self.nodes = {} self.Clear() # nodes for n in range(len(self.items)): item = self.items[n] focus_node, highlight_node, color = self._get_node_info(n) node_label = self._get_node_label(n, highlight_node=highlight_node) nid = self.AddNode((node_label, color)) framecol = self.COLOR_FRAME_DEFAULT if highlight_node: framecol = self.COLOR_FRAME_HIGHLIGHT if focus_node: framecol = self.COLOR_FRAME_FOCUS p = idaapi.node_info_t() p.frame_color = framecol self.SetNodeInfo(nid, p, idaapi.NIF_FRAME_COLOR) self.nodes[item.obj_id] = nid if self.center_node and focus_node: widget = ida_kernwin.find_widget(self._title) ida_graph.viewer_center_on(widget, nid) # edges for n in range(len(self.items)): item = self.items[n] for i in range(self._nsucc(n)): t = self._succ(n, i) self.AddEdge(self.nodes[item.obj_id], self.nodes[self.items[t].obj_id]) return True
def OnRefresh(self): """ @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. """ focus_node_id = None if self.redraw: self.nodes = {} self.Clear() # nodes for n in range(len(self.items)): item = self.items[n] focus_node, highlight_node, color = self._get_node_info(n) node_label = self._get_node_label( n, highlight_node=highlight_node) nid = self.AddNode((node_label, color)) framecol = self.COLOR_FRAME_DEFAULT if highlight_node: framecol = self.COLOR_FRAME_HIGHLIGHT if focus_node: framecol = self.COLOR_FRAME_FOCUS p = ida_graph.node_info_t() p.frame_color = framecol self.SetNodeInfo(nid, p, ida_graph.NIF_FRAME_COLOR) self.nodes[item.obj_id] = nid if focus_node: focus_node_id = nid # edges for n in range(len(self.items)): item = self.items[n] for i in range(self._nsucc(n)): t = self._succ(n, i) self.AddEdge(self.nodes[item.obj_id], self.nodes[self.items[t].obj_id]) if self.center_node and focus_node_id: widget = ida_kernwin.find_widget(self._title) ida_graph.viewer_center_on(widget, focus_node_id) self.redraw = False # use new graph return True for n in range(len(self.items)): item = self.items[n] focus_node, highlight_node, color = self._get_node_info(n) nid = self.nodes[item.obj_id] framecol = self.COLOR_FRAME_DEFAULT if highlight_node: framecol = self.COLOR_FRAME_HIGHLIGHT if focus_node: focus_node_id = nid framecol = self.COLOR_FRAME_FOCUS p = ida_graph.node_info_t() p.frame_color = framecol self.SetNodeInfo(nid, p, ida_graph.NIF_FRAME_COLOR) if self.center_node and focus_node_id: widget = ida_kernwin.find_widget(self._title) ida_graph.viewer_center_on(widget, focus_node_id) return False