Пример #1
0
 def activate(self, ctx):
     global last_pos
     e = ida_moves.lochist_entry_t()
     if ida_kernwin.get_custom_viewer_location(e, ctx.widget):
         last_pos = last_pos_t(ctx.widget_title, e)
     else:
         print("Failed to retrieve position")
Пример #2
0
 def activate(self, ctx):
     vu = ida_hexrays.get_widget_vdui(ctx.widget)
     if vu:
         loc = ida_moves.lochist_entry_t()
         if ida_kernwin.get_custom_viewer_location(loc, ctx.widget):
             coord = pseudo_line_t(vu.cfunc.entry_ea,
                                   _place_to_line_number(loc.place()))
             if coord in self.hooks.marked_lines.keys():
                 del self.hooks.marked_lines[coord]
             else:
                 self.hooks.marked_lines[coord] = self.COLOR_KEY
             ida_kernwin.refresh_custom_viewer(ctx.widget)
Пример #3
0
def jump_next_comment(v):
    """
    Starting at the current line, keep generating lines until
    a comment is found. When this happens, position the viewer
    at the right coordinates.
    """
    loc = ida_moves.lochist_entry_t()
    if ida_kernwin.get_custom_viewer_location(loc, v):
        place = loc.place()
        idaplace = ida_kernwin.place_t_as_idaplace_t(place)
        ea = idaplace.ea
        while ea != ida_idaapi.BADADDR:
            _, disass = ida_lines.generate_disassembly(
                ea,
                1000,  # maximum number of lines
                False,  # as_stack=False
                False
            )  # notags=False - we want tags, in order to spot comments

            found = None

            # If this is the start item, start at the next line
            start_lnnum = (idaplace.lnnum + 1) if ea == idaplace.ea else 0

            for rel_lnnum, line in enumerate(disass[start_lnnum:]):
                vis_cx = find_comment_visual_position_in_tagged_line(line)
                if vis_cx > -1:
                    found = (ea, rel_lnnum, vis_cx)
                    break

            if found is not None:
                idaplace.ea = found[0]
                idaplace.lnnum = start_lnnum + found[1]
                loc.set_place(idaplace)
                loc.renderer_info().pos.cx = found[2]
                ida_kernwin.custom_viewer_jump(v, loc, ida_kernwin.CVNF_LAZY)
                break

            ea = ida_bytes.next_head(ea, ida_idaapi.BADADDR)