Пример #1
0
def di(bin_s):
    '''
    Disassemble some x86 assembly
    di(\x90A\x90)
    '''
    bin = hexa_representation_to_bytes(bin_s)
    if bin == None:
        return 'An error occured'

    job_done, symbol_pool = set(), asmbloc.asm_symbol_pool()
    all_bloc = asmbloc.dis_bloc_all(x86_mn, bin_stream(bin), 0, job_done, symbol_pool)
    
    disassembly_dic = {}
    for i in all_bloc:
        for b in i.lines:
            # hmm ok, re-order the different instruction from each blocs
            disassembly_dic[b.offset] = b
            
    disass, offset = '', 0
    for k in sorted(disassembly_dic.keys()):
        # add the label for the different blocs ; except for the main label
        if symbol_pool.getby_offset(k) and k != 0:
            disass += '%s: ' % symbol_pool.getby_offset(k).name
        disass += '%s ; ' % clean_assembly(str(disassembly_dic[k]))
    if disass == '':
        return 'No disassembly found.'
    return disass
Пример #2
0
    def __init__(self, buff):
        self.E = elf_init.ELF(buff)

        self.in_str = bin_stream.bin_stream(self.E.virt)
        self.symbol_pool = None
        self.functions = []

        self.create_symbol_pool()

        self.CM = ClassManager(self.in_str, self.symbol_pool)

        self.create_functions()
Пример #3
0
    def __init__(self, buff):
        self.E = elf_init.ELF( buff )

        self.in_str = bin_stream.bin_stream(self.E.virt)
        self.symbol_pool = None
        self.functions = collections.deque()

        self.create_symbol_pool()

        self.CM = ClassManager( self.in_str, self.symbol_pool )

        self.create_functions()
Пример #4
0
    def __disassembleMiasm(self, data, address, mn, dll_dyn_funcs):
        in_str = bin_stream(data)
        job_done = set()
        symbol_pool = asmbloc.asm_symbol_pool()
        for (n,f), ads in dll_dyn_funcs.items():
            for ad in ads:
                l  = symbol_pool.getby_name_create("%s_%s"%(n, f))
                l.offset = ad
                symbol_pool.s_offset[l.offset] = l

        all_bloc = asmbloc.dis_bloc_all(mn, in_str, address, job_done, symbol_pool, follow_call = True, lines_wd = 60)
        lines = []
        for bloc in all_bloc:
            lines.append(str(bloc))
        return ('\n'.join(lines))