我们从Python开源项目中,提取了以下6个代码示例,用于说明如何使用idaapi.get_current_tform()。
def refresh_views(): """ Refresh the IDA views. """ # refresh IDA views idaapi.refresh_idaview_anyway() # NOTE/COMPAT: refresh hexrays view, if active if using_ida7api: current_widget = idaapi.get_current_widget() vu = idaapi.get_widget_vdui(current_widget) else: current_tform = idaapi.get_current_tform() vu = idaapi.get_tform_vdui(current_tform) if vu: vu.refresh_ctext()
def get_cursor_func_ref(): current_tform = idaapi.get_current_tform() tform_type = idaapi.get_tform_type(current_tform) # get the hexrays vdui (if available) vu = idaapi.get_tform_vdui(current_tform) if vu: cursor_addr = vu.item.get_ea() elif tform_type == idaapi.BWN_DISASM: cursor_addr = idaapi.get_screen_ea() op_addr = idc.GetOperandValue(cursor_addr, idaapi.get_opnum()) op_func = idaapi.get_func(op_addr) if op_func and op_func.startEA == op_addr: return op_addr else: return idaapi.BADADDR cursor_func = idaapi.get_func(cursor_addr) if cursor_func and cursor_func.startEA == cursor_addr: return cursor_addr return idaapi.BADADDR
def get_init_menu(self): try: self.widget = form_to_widget(idaapi.get_current_tform()) if self.widget is None: raise Exception() except: self.widget = form_to_widget(idaapi.find_tform('Output window')) self.window = self.widget.window() self.menu = self.window.findChild(QtWidgets.QMenuBar) # add top level menu
def get_custom_viewer_hint(self, view, place): try: tform = idaapi.get_current_tform() if idaapi.get_tform_type(tform) != idaapi.BWN_DISASM: return None curline = idaapi.get_custom_viewer_curline(view, True) # sometimes get_custom_viewer_place() returns [x, y] and sometimes [place_t, x, y]. # we want the place_t. viewer_place = idaapi.get_custom_viewer_place(view, True) if len(viewer_place) != 3: return None _, x, y = viewer_place ea = place.toea() # "color" is a bit of misnomer: its the type of the symbol currently hinted color = get_color_at_char(curline, x) if color != idaapi.COLOR_ADDR: return None # grab the FAR references to code (not necessarilty a branch/call/jump by itself) far_code_references = [xref.to for xref in idautils.XrefsFrom(ea, ida_xref.XREF_FAR) if idc.isCode(idc.GetFlags(xref.to))] if len(far_code_references) != 1: return None fva = far_code_references[0] # ensure its actually a function if not idaapi.get_func(fva): return None # this magic constant is the number of "important lines" to display by default. # the remaining lines get shown if you scroll down while the hint is displayed, revealing more lines. return render_function_hint(fva), DEFAULT_IMPORTANT_LINES_NUM except Exception as e: logger.warning('unexpected exception: %s. Get in touch with @williballenthin.', e, exc_info=True) return None
def create_ioctl_tab(tracker, modal=False): global ioctl_tracker ioctl_tracker = tracker items = get_all_defines() action = "send_ioctl" actname = "choose2:act%s" % action idaapi.register_action( idaapi.action_desc_t( actname, "Send IOCTL", send_ioctl_handler_t(items))) idaapi.register_action( idaapi.action_desc_t( "choose2:actcopy_defines", "Copy All Defines", copy_defines_handler_t(items))) idaapi.register_action( idaapi.action_desc_t( "choose2:actstop_unload", "Stop & Unload Driver", stop_unload_handler_t())) idaapi.register_action( idaapi.action_desc_t( "choose2:actstart_load", "Load & Start Driver", start_load_handler_t())) global c c = MyChoose2("IOCTL Code Viewer", items, modal=modal) r = c.show() form = idaapi.get_current_tform() idaapi.attach_action_to_popup(form, None, "choose2:act%s" % action) idaapi.attach_action_to_popup(form, None, "choose2:actcopy_defines") idaapi.attach_action_to_popup(form, None, "choose2:actstop_unload") idaapi.attach_action_to_popup(form, None, "choose2:actstart_load")
def touch_window(target): """ Touch a window/widget/form to ensure it gets drawn by IDA. XXX/HACK: We need to ensure that widget we will analyze actually gets drawn so that there are colors for us to steal. To do this, we switch to it, and switch back. I tried a few different ways to trigger this from Qt, but could only trigger the full painting by going through the IDA routines. """ # get the currently active widget/form title (the form itself seems transient...) if using_ida7api: twidget = idaapi.get_current_widget() title = idaapi.get_widget_title(twidget) else: form = idaapi.get_current_tform() title = idaapi.get_tform_title(form) # touch/draw the widget by playing musical chairs if using_ida7api: # touch the target window by switching to it idaapi.activate_widget(target, True) flush_ida_sync_requests() # locate our previous selection previous_twidget = idaapi.find_widget(title) # return us to our previous selection idaapi.activate_widget(previous_twidget, True) flush_ida_sync_requests() else: # touch the target window by switching to it idaapi.switchto_tform(target, True) flush_ida_sync_requests() # locate our previous selection previous_form = idaapi.find_tform(title) # lookup our original form and switch back to it idaapi.switchto_tform(previous_form, True) flush_ida_sync_requests()