示例#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    STWU       R1, 0xFFFFFFE0(R1)", "9421ffe0"),
    ('b', "XXXXXXXX    SUBFIC     R0, R2, 0xFFFFFFE0", "2002ffe0"),
    ('b', "XXXXXXXX    SUBFIC     R11, R31, 0x0", "217f0000"),
    ('b', "XXXXXXXX    TW         0x5, R0, R3", "7ca01808"),
    ('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))