예제 #1
0
    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
예제 #2
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
예제 #3
0
파일: segment.py 프로젝트: wzr/toolbag
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
예제 #4
0
 def FreeCodeSegment(self):
     while True:
         if idc.SegDelete(self.segment_start, 0) == 0:
             break