Пример #1
0
def compute(asm, inputstate={}, debug=False):
    loc_db = LocationDB()
    sympool = dict(regs_init)
    sympool.update({k: ExprInt(v, k.size) for k, v in viewitems(inputstate)})
    ir_tmp = ir_arch(loc_db)
    ircfg = ir_tmp.new_ircfg()
    symexec = SymbolicExecutionEngine(ir_tmp, sympool)
    instr = mn.fromstring(asm, loc_db, "b")
    code = mn.asm(instr)[0]
    instr = mn.dis(code, "b")
    instr.offset = inputstate.get(PC, 0)
    lbl = ir_tmp.add_instr_to_ircfg(instr, ircfg)
    symexec.run_at(ircfg, lbl)
    if debug:
        for k, v in viewitems(symexec.symbols):
            if regs_init.get(k, None) != v:
                print(k, v)
    out = {}
    for k, v in viewitems(symexec.symbols):
        if k in EXCLUDE_REGS:
            continue
        elif regs_init.get(k, None) == v:
            continue
        elif isinstance(v, ExprInt):
            out[k] = int(v)
        else:
            out[k] = v
    return out
Пример #2
0
    ('b', "XXXXXXXX    TWI        0x5, R0, 0x12", "0ca00012"),
    ('b', "XXXXXXXX    XORI       R9, R0, 0x62", "68090062"),
    ('b', "XXXXXXXX    XORIS      R10, R10, 0x8000", "6d4a8000"),
]

ts = time.time()
for mode, s, l, in reg_tests:
    print("-" * 80)
    s = s[12:]
    b = h2i(l)
    print("fromstring %r" % s)
    l = mn_ppc.fromstring(s, None, mode)
    for x in mn_ppc.asm(l):
        print('(%r, "XXXXXXXX    %s", "%s"),' % (mode, l, encode_hex(x)))
    print("%s %r" % (mode, b))
    mn = mn_ppc.dis(b, mode)
    print("dis args %s" % [(str(x), x.size) for x in mn.args])
    print(s)
    print(mn)
    assert(str(mn).strip() == s)
    print('fromstring %r' % s)
    l = mn_ppc.fromstring(s, None, mode)
    print('str args %s' % [(str(x), x.size) for x in l.args])
    assert(str(l).strip(' ') == s)
    a = mn_ppc.asm(l)
    print('asm result %s' % [x for x in a])
    print(repr(b))
    print(l.to_html())

    print('test re dis')
    for x in a: