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")
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)
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)