def renew_filter(self): self.text_items = [] self.functions = [] self.header_files = [] if not self.old_name: return self.text_items = [] for filename in proj.header_files(): with open(filename, "r") as f: for line, text in enumerate(f.readlines()): if re.search(self.regex(), text): item = { 'filename': filename, 'line': line, 'text': text.strip() } self.text_items.append(item) #find function names for ea in idautils.Functions(): func_name = FunctionName(idc.GetFunctionName(ea)) if func_name.namespace == self.old_name: a = {"ea": ea, "func_name": func_name} self.functions.append(a) #find header filenames self.header_files = [ f for f in proj.header_files() if os.path.basename(f).split(".", 1)[0] == self.old_name ]
def get_class_def(class_name): h = class_name + ".h" if h in proj.header_files(): hfile = hparser.HFile(h) if class_name in hfile.struct_list(): return hfile.get(class_name) else: for h in proj.header_files(): hfile = hparser.HFile(h) if class_name in hfile.struct_list(): return hfile.get(class_name) return None
def __init__(self): super(Ui_RenameClassDialog, self).__init__() self.d = QtGui.QDialog() self.setupUi(self.d) self.old_name = "" self.new_name = "" self.text_items = [] self.functions = [] self.header_files = [] self.ok_btn.clicked.connect(self.ok_btn_clicked) self.cancel_btn.clicked.connect(self.cancel_btn_clicked) self.class_cb.editTextChanged.connect(self.oldname_changed) self.new_name_edit.textChanged.connect(self.newname_changed) self.include_all_cb.stateChanged.connect(self.all_state_changed) visual_style.set(self.d) self.structname_to_file_table = {} self.field_to_struct_table = {} for h in proj.header_files(): hfile = hparser.HFile(h) for name in hfile.struct_list(): self.structname_to_file_table[name] = h # for field in hfile.get(name).names(): # l = self.field_to_struct_table.get(field, []) # l.append(name) # self.field_to_struct_table[field] = l self.struct_completer = QtGui.QCompleter( self.structname_to_file_table.keys(), self.d) self.struct_completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.class_cb.setCompleter(self.struct_completer)
def __init__(self): super(Ui_RenameVarDialog, self).__init__() self.d = QtGui.QDialog() self.setupUi(self.d) self.old_name = "" self.new_name = "" self.vars = [] self.functions = [] self.ok_btn.clicked.connect(self.ok_btn_clicked) self.cancel_btn.clicked.connect(self.cancel_btn_clicked) self.old_name_edit.textChanged.connect(self.oldname_changed) self.new_name_edit.textChanged.connect(self.newname_changed) visual_style.set(self.d) self.structname_to_file_table = {} self.field_to_struct_table = {} for h in proj.header_files(): hfile = hparser.HFile(h) for name in hfile.struct_list(): self.structname_to_file_table[name] = h for field in hfile.get(name).names(): l = self.field_to_struct_table.get(field, []) l.append(name) self.field_to_struct_table[field] = l
def scan_headers(self): h = self.class_name + ".h" if h in proj.header_files(): hfile = hparser.HFile(h) if self.class_name in hfile.struct_list(): self.class_def = hfile.get(self.class_name) else: for h in proj.header_files(): hfile = hparser.HFile(h) if self.class_name in hfile.struct_list(): self.class_def = hfile.get(self.class_name) break for h in proj.header_files(): hfile = hparser.HFile(h) for name in hfile.struct_list(): self.structname_to_file_table[name] = h
def __init__(self): super(Ui_CreateVarDialog,self).__init__() self.d = QtGui.QDialog() self.setupUi(self.d) self.save_btn.clicked.connect(self.ok_btn_clicked) self.cancel_btn.clicked.connect(self.cancel_btn_clicked) visual_style.set(self.d) self.success = False self.structname_to_file_table = {} self.field_to_struct_table = {} for h in proj.header_files(): hfile = hparser.HFile(h) for name in hfile.struct_list(): self.structname_to_file_table[name] = h for field in hfile.get(name).names(): l = self.field_to_struct_table.get(field,[]) l.append(name) self.field_to_struct_table[field] = l self.class_cb.editTextChanged.connect(self.on_class_name_changed) self.old_var_name_edit.textChanged.connect(self.on_old_var_changed) self.array_index_edit.textChanged.connect(self.on_editors_changed) self.newvar_name_edit.textChanged.connect(self.on_editors_changed) self.verticalScrollBar.valueChanged.connect(self.on_scrolled) self.dest_text_edit.verticalScrollBar().valueChanged.connect(self.on_scrolled) self.source_text_edit.verticalScrollBar().valueChanged.connect(self.on_scrolled) self.old_struct_text = "" self.new_struct_text = "" self.old_struct = None self.new_struct = None self.struct_completer = QtGui.QCompleter(self.structname_to_file_table.keys(),self.d) self.struct_completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.class_cb.setCompleter(self.struct_completer) self.fill_structname_list()
def find_text_in_headers(filter_text, regex=False, standalone=False): ret = [] for filename in proj.header_files(): f = open(filename, "r") for line, text in enumerate(f.readlines()): if regex: found = re.search(filter_text, text) elif standalone: def eee(x): return '\\%s' % x if re.match('\W', x) else x filter2 = "".join([eee(s) for s in filter_text]) found = re.search(r'\b' + filter2 + r'\b', text) else: found = filter_text in text if found: dct = {'line': line, 'text': text, 'filename': filename} ret.append(dct) f.close() return ret
def reload_headers(): for fl in header_files(): print "loading %s" % fl if idc.ParseTypes(fl, idc.PT_FILE | idc.PT_PAKDEF) == 0: print("Successful")