Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #5
0
    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