Пример #1
0
def tne(ir, instr, arg1, arg2):
    e = []

    loc_except, loc_except_expr = ir.gen_loc_key_and_expr(ir.IRDst.size)
    loc_next = ir.get_next_loc_key(instr)
    loc_next_expr = m2_expr.ExprLoc(loc_next, ir.IRDst.size)

    do_except = []
    do_except.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(
        EXCEPT_DIV_BY_ZERO, exception_flags.size)))
    do_except.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr))
    blk_except = IRBlock(ir.loc_db, loc_except, [AssignBlock(do_except, instr)])

    cond = arg1 ^ arg2


    e = []
    e.append(m2_expr.ExprAssign(ir.IRDst,
                             m2_expr.ExprCond(cond, loc_next_expr, loc_except_expr)))

    return e, [blk_except]
Пример #2
0
def ins(ir, instr, a, b, c, d):
    e = []
    pos = int(c)
    l = int(d)

    my_slices = []
    if pos != 0:
        my_slices.append(a[:pos])
    if l != 0:
        my_slices.append(b[:l])
    if pos + l != 32:
        my_slices.append(a[pos + l:])
    r = m2_expr.ExprCompose(*my_slices)
    e.append(m2_expr.ExprAssign(a, r))
    return e, []
Пример #3
0
    def get_ir(self, instr):
        args = instr.args
        instr_ir, extra_ir = get_mnemo_expr(self, instr, *args)

        fixed_regs = {
            self.pc: m2_expr.ExprInt(instr.offset + 4, 32),
            ZERO: m2_expr.ExprInt(0, 32)
        }

        instr_ir = [m2_expr.ExprAssign(expr.dst, expr.src.replace_expr(fixed_regs))
                    for expr in instr_ir]

        new_extra_ir = [irblock.modify_exprs(mod_src=lambda expr: expr.replace_expr(fixed_regs))
                        for irblock in extra_ir]
        return instr_ir, new_extra_ir
Пример #4
0
def clz(ir, instr, rs, rd):
    e = []
    e.append(m2_expr.ExprAssign(rd, m2_expr.ExprOp('cntleadzeros', rs)))
    return e, []
Пример #5
0
Файл: ir.py Проект: trufae/miasm
 def dst2ExprAssign(self, dst):
     """Return an ExprAssign corresponding to @dst equation
     @dst: Expr instance"""
     return m2_expr.ExprAssign(dst, self[dst])
Пример #6
0
 def to_constraint(self):
     cst1, cst2 = m2_expr.ExprInt(0, 1), m2_expr.ExprInt(1, 1)
     return m2_expr.ExprAssign(cst1,
                               m2_expr.ExprCond(self.expr, cst1, cst2))
Пример #7
0
 def to_constraint(self):
     return m2_expr.ExprAssign(self.expr,
                               m2_expr.ExprInt(0, self.expr.size))
Пример #8
0
def syscall(ir, instr, code):
    e = []
    e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_SYSCALL, 32)))
    return e, []
Пример #9
0
def break_(ir, instr):
    e = []
    e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_SOFT_BP, 32)))
    return e, []
Пример #10
0
def sh(ir, instr, arg1, arg2):
    e = []
    e.append(m2_expr.ExprAssign(m2_expr.ExprMem(arg2.ptr, 16), arg1[:16]))
    return e, []
Пример #11
0
def sb(ir, instr, arg1, arg2):
    """The least significant byte of @arg1 is stored at the specified address
    @arg2."""
    e = []
    e.append(m2_expr.ExprAssign(m2_expr.ExprMem(arg2.ptr, 8), arg1[:8]))
    return e, []