def event_callback(self, event, *args): try: if event == idaapi.hxe_keyboard: vu, keycode, shift = args if idaapi.lookup_key_code(keycode, shift, True) == idaapi.get_key_code("X") and shift == 0: if self.show_xrefs(vu): return 1 elif event == idaapi.hxe_right_click: self.vu = args[0] idaapi.add_custom_viewer_popup_item(self.vu.ct, "Xrefs", "X", self.menu_callback) except: traceback.print_exc() return 0
def event_callback(self, event, *args): try: if event == idaapi.hxe_keyboard: vu, keycode, shift = args if idaapi.lookup_key_code( keycode, shift, True) == idaapi.get_key_code("X") and shift == 0: if self.show_xrefs(vu): return 1 elif event == idaapi.hxe_right_click: self.vu = args[0] idaapi.add_custom_viewer_popup_item(self.vu.ct, "Xrefs", "X", self.menu_callback) except: traceback.print_exc() return 0
def event_callback(self, event, *args): try: if event == idaapi.hxe_keyboard: vu, keycode, shift = args if idaapi.lookup_key_code(keycode, shift, True) == idaapi.get_key_code("I") and shift == 0: if self.invert_if_event(vu): return 1 elif event == idaapi.hxe_right_click: self.vu, = args idaapi.add_custom_viewer_popup_item(self.vu.ct, "Invert then/else", "I", self.menu_callback) elif event == idaapi.hxe_maturity: cfunc, maturity = args if maturity == idaapi.CMAT_FINAL: self.restore(cfunc) except: traceback.print_exc() return 0
def event_callback(self, event, *args): try: # print "event: %d"%event if event == idaapi.hxe_keyboard: vu, keycode, shift = args if idaapi.lookup_key_code( keycode, shift, True) == idaapi.get_key_code("B") and shift == 0: if self.theotherline: self.theotherline = jump(vu.ct, self.theotherline) return 0 if event <= idaapi.hxe_print_func: self.safe = False if event == idaapi.hxe_switch_pseudocode: self.safe = False if event == idaapi.hxe_func_printed: self.safe = True if event == idaapi.hxe_text_ready: self.safe = True if event == idaapi.hxe_curpos: if not self.safe: return 0 #print "1" self.vu = args[0] if not self.vu: return 0 #print "2" if self.vu.cfunc.maturity != idaapi.CMAT_FINAL: return 0 #print "3" if not self.vu.visible(): return 0 #print "4" if not self.vu.refresh_cpos(idaapi.USE_KEYBOARD): # print "refresh_cpos failed" return 0 pos = self.vu.cpos ypos = pos.lnnum #print "cursor click %d %d %d" % (pos.x, pos.y, pos.lnnum) if ypos in self.highlights: return 0 #print "5" ps = self.vu.cfunc.get_pseudocode() #print "6" #print "ypos:%d"%ypos #print "ps[ypos].line: %s"%(ps[ypos].line) #line = [idaapi.COLSTR("[%02d]"%i, chr(i)) for i in range(1,0x40) ] #ps[0].line = ''.join(line); #ps[1].line = '\x04'.join(line); #line = [idaapi.COLSTR( idaapi.COLSTR("[ \x04%02d\x04 ]"%i, chr(i)), chr(i+1)) for i in range(1,0x40) ] #ps[2].line = ''.join(line); #ps[3].line = '\x04'.join(line); ln = ps[ypos].line[:] #print "ln" curline = idaapi.tag_remove(ln) #print "7" idxO = curline.find('{') idxC = curline.find('}') #print "O:", idxO, " C: ",idxC #there is no need to highlight first and last { #print "8" if (idxO >= 0) or (idxC >= 0): # print "9" self.clearall(ps, False) self.highlights[ypos] = ps[ypos].bgcolor ps[ypos].bgcolor = self.hicolor dir = 1 bracechar = '}' idx = idxO if (idxC >= 0): dir = -1 bracechar = '{' idx = idxC j = ypos + dir max = len(ps) # print "max: ",max while (j >= 0) and (j < max): # print "10" #print "j:", j ln = idaapi.tag_remove(ps[j].line) if ln.find(bracechar) == idx: if not (j in self.highlights): self.highlights[j] = ps[j].bgcolor #ps[j].line = ps[j].line.replace(bracechar, idaapi.COLSTR("\x04"+bracechar+"\x04", "\x27")) #ps[j].line = ps[j].line.replace(bracechar, idaapi.COLSTR(bracechar, chr(52))) ps[j].bgcolor = self.hicolor self.theotherline = j break j += dir idaapi.refresh_idaview_anyway() else: self.clearall(ps) #print "11" return 0 except: traceback.print_exc() return 0