Beispiel #1
0
    def OnDeleteLine(self, n):
        ans = idaapi.askyn_c(
            1,
            "HIDECANCEL\nAre you sure you want to delete function [%s] @ [%s]?"
            % (self.items[n][3], self.items[n][4]))
        if ans == 1:
            asms = Assembler.LoadSavedAssemblers()
            item = int(self.items[n][2], 16)
            if asms != None and len(asms.keys()) > 0:
                for asm in asms.itervalues():
                    if asm.functions.has_key(item):
                        print "Removed [%08x]!" % item
                        del asm.functions[item]
                        asm.SaveState()

            opty_ea = int(self.items[n][4], 16)
            print "set_name[%08x]" % opty_ea
            idc.MakeComm(opty_ea, "")
            idaapi.set_name(opty_ea, "")
            idc.DelFunction(opty_ea)

            comment = idc.Comment(item)
            comment = re.sub(r"(?i)OPTY@\[[\d+abcdef]+\];\s*", "", comment)
            idc.MakeComm(item, comment)

        self.populate_items()
        return n
Beispiel #2
0
def optimice():
    ea = idc.ScreenEA()
    print "Starting optimization @ [%08x]" % ea
    
    f = Function.Function(ea)    
    cfg = CFGOptimization.ReduceJMP(f)
    peep = CodeOptimization.PeepHole(f)
    dead = CodeOptimization.DeadCodeElimination(f)
    
    modified = True
    while modified:
        modified = False
        
        f.AssertCFGStructure()
        modified |= cfg.Reduce()
        
        modified |= cfg.JccReduce()
        
        modified |= cfg.JccReduceComplementary()
        
        modified |= peep.OptimizeFunction()
        
        modified |= dead.OptimizeFunction()
        
        f.CleanUp()
        
        #f.PrintBlocks()
    
    f.CleanUp()
    f.AssertCFGStructure()
    
    #f.PrintBlocks()
    
    asms = Assembler.LoadSavedAssemblers()
    
    if asms != None and len(asms.keys()) > 1:
        print "Ask user to choose one!"
    elif asms != None and len(asms.keys()) == 1:
        asm = asms.values()[0]
    else:
        asm = Assembler.Assemble()
    
    asm.Assemble(f)
    asm.SaveState()
    
    print "Optimization ended!"
Beispiel #3
0
    def populate_items(self):
        asms = Assembler.LoadSavedAssemblers()
        lst = []

        if asms != None and len(asms.keys()) > 0:
            for asm in asms.itervalues():
                for key in asm.functions.iterkeys():
                    lst.append([
                        "%08x" % asm.segment_start,
                        idc.GetFunctionName(key),
                        "%08x" % key,
                        idc.GetFunctionName(asm.functions[key][0]),
                        "%08x" % asm.functions[key][0]
                    ])

        del asms
        self.items = lst

        return self.items