Ejemplo n.º 1
0
    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
        ]
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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")