def OnEditLine(self, n): #this is "Delete Segment" ans = idaapi.askyn_c( 1, "HIDECANCEL\nAre you sure you want to delete segment and all optimized data from disk?" ) if ans == 1: opty_dir = idc.GetIdbPath() opty_dir = opty_dir[:opty_dir.rfind( os.sep)] + os.sep + "optimice_%s" % idc.GetInputFile() print opty_dir if not os.path.isdir(opty_dir): print ">GUI_FunctionManager:OnEditLine - Error [%s] not a directory!" % opty_dir return 0 shutil.rmtree(opty_dir) print ">GUI_FunctionManager: Optimice directory deleted: [%s]" % opty_dir idc.SegDelete(int(self.items[n][0], 16), 0) print ">GUI_FunctionManager: Optimice segment deleted: [%s]" % self.items[ n][0] self.populate_items() return 0
def SimpleAsm(string): if sys.modules.has_key('miasm'): try: i_opcode = x86_mn.asm(string.lower()) except: print ">Assembler:SimpleAsm - Error miasm.asm() for [%s]" % string i_opcode = '' if len(i_opcode) > 0: return i_opcode idc.Batch(1) while True: seg_start = random.randint(0x1000, 0xffffffff) seg_size = 0x20 if idc.SegCreate(seg_start, seg_start + seg_size, 0, 1, 0, 0) != 0: break tmp = idaapi.assemble(seg_start, 0, seg_start, 1, string) if tmp == 0: while idc.SegDelete(seg_start, 0) != 0: pass idc.Batch(0) print "Failed to assemble [%s]" % string raise MiscError idc.MakeCode(seg_start) opcode = ''.join([ chr(idc.Byte(seg_start + i)) for i in xrange(0, idc.ItemSize(seg_start) - 1) ]) while idc.SegDelete(seg_start, 0) != 0: pass idc.Batch(0) return opcode
def realloc(ea, size, name=".newseg"): '''Deletes the segment for which 'ea' is a part of. Re-creates it with the given size and returns its base address''' # XXX: so, this is ghetto, but I'm going to leverage segment.alloc to create a # new segment, steal its address, delete it, and move this segment there with a new size new_seg = alloc(size, name) idc.SegDelete(new_seg, True) # move our existing segment idc.MoveSegm(ea, new_seg, True) # change its bounds idc.SetSegBounds(new_seg, new_seg, new_seg + size, True) return new_seg
def FreeCodeSegment(self): while True: if idc.SegDelete(self.segment_start, 0) == 0: break