diff options
45 files changed, 1372 insertions, 1361 deletions
diff --git a/example/expression/solve_condition_stp.py b/example/expression/solve_condition_stp.py index acb3abf4..6962e2ef 100644 --- a/example/expression/solve_condition_stp.py +++ b/example/expression/solve_condition_stp.py @@ -5,7 +5,7 @@ from pdb import pm from miasm2.analysis.machine import Machine from miasm2.expression.expression import ExprInt, ExprCond, ExprId, \ - get_expr_ids, ExprAff, ExprLoc + get_expr_ids, ExprAssign, ExprLoc from miasm2.core.bin_stream import bin_stream_str from miasm2.ir.symbexec import SymbolicExecutionEngine, get_block from miasm2.expression.simplifications import expr_simp @@ -166,7 +166,7 @@ if __name__ == '__main__': expr_test = ExprCond(expr, ExprInt(1, value.size), ExprInt(0, value.size)) - cond = translator_smt2.from_expr(ExprAff(expr_test, value)) + cond = translator_smt2.from_expr(ExprAssign(expr_test, value)) conditions.append(cond) for name in all_ids: diff --git a/example/ida/ctype_propagation.py b/example/ida/ctype_propagation.py index a3d6df8b..6a655fa8 100644 --- a/example/ida/ctype_propagation.py +++ b/example/ida/ctype_propagation.py @@ -10,7 +10,7 @@ from miasm2.arch.x86.ctype import CTypeAMD64_unk, CTypeX86_unk from miasm2.arch.msp430.ctype import CTypeMSP430_unk from miasm2.core.objc import CTypesManagerNotPacked, ExprToAccessC, CHandler from miasm2.core.ctypesmngr import CAstTypes -from miasm2.expression.expression import ExprLoc, ExprInt, ExprOp, ExprAff +from miasm2.expression.expression import ExprLoc, ExprInt, ExprOp, ExprAssign from miasm2.ir.symbexec_types import SymbExecCType from miasm2.expression.parser import str_to_expr from miasm2.analysis.cst_propag import add_state, propagate_cst_expr @@ -232,8 +232,8 @@ def get_ira_call_fixer(ira): print hex(stk_diff) call_assignblk = AssignBlock( [ - ExprAff(self.ret_reg, ExprOp('call_func_ret', ad)), - ExprAff(self.sp, self.sp + ExprInt(stk_diff, self.sp.size)) + ExprAssign(self.ret_reg, ExprOp('call_func_ret', ad)), + ExprAssign(self.sp, self.sp + ExprInt(stk_diff, self.sp.size)) ], instr ) @@ -314,8 +314,8 @@ def analyse_function(): assignblk_head = AssignBlock( [ - ExprAff(ir_arch.IRDst, ExprLoc(lbl_real_start, ir_arch.IRDst.size)), - ExprAff(ir_arch.sp, ir_arch.arch.regs.regs_init[ir_arch.sp]) + ExprAssign(ir_arch.IRDst, ExprLoc(lbl_real_start, ir_arch.IRDst.size)), + ExprAssign(ir_arch.sp, ir_arch.arch.regs.regs_init[ir_arch.sp]) ], first_block.lines[0] ) diff --git a/example/ida/symbol_exec.py b/example/ida/symbol_exec.py index ffaa9b27..e004b1b6 100644 --- a/example/ida/symbol_exec.py +++ b/example/ida/symbol_exec.py @@ -3,7 +3,7 @@ import operator import idaapi import idc from miasm2.expression.expression_helper import Variables_Identifier -from miasm2.expression.expression import ExprAff +from miasm2.expression.expression import ExprAssign from utils import expr2colorstr, translatorForm @@ -64,7 +64,7 @@ class symbolicexec_t(idaapi.simplecustviewer_t): def translate_expr(self, line_nb): element = self.line2eq[line_nb] - expr = ExprAff(*element) + expr = ExprAssign(*element) form = translatorForm(expr) form.Compile() form.Execute() diff --git a/example/ida/utils.py b/example/ida/utils.py index c66475f2..4f4f01fe 100644 --- a/example/ida/utils.py +++ b/example/ida/utils.py @@ -145,7 +145,7 @@ class TranslatorIDA(Translator): for arg in expr._args ) + ')') - def from_ExprAff(self, expr): + def from_ExprAssign(self, expr): return "%s = %s" % tuple(map(expr.from_expr, (expr.dst, expr.src))) diff --git a/example/symbol_exec/dse_strategies.py b/example/symbol_exec/dse_strategies.py index 5a4be321..67b63aea 100644 --- a/example/symbol_exec/dse_strategies.py +++ b/example/symbol_exec/dse_strategies.py @@ -22,7 +22,7 @@ from argparse import ArgumentParser from miasm2.analysis.machine import Machine from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE from miasm2.analysis.dse import DSEPathConstraint -from miasm2.expression.expression import ExprMem, ExprId, ExprInt, ExprAff +from miasm2.expression.expression import ExprMem, ExprId, ExprInt, ExprAssign # Argument handling parser = ArgumentParser("DSE Example") @@ -102,7 +102,7 @@ while todo: jitter.init_run(run_addr) # Set the argument value in the jitter context - jitter.eval_expr(ExprAff(arg_addr, arg_value)) + jitter.eval_expr(ExprAssign(arg_addr, arg_value)) # Launch jitter.continue_run() diff --git a/miasm2/analysis/depgraph.py b/miasm2/analysis/depgraph.py index 0d4a3719..5923e7ed 100644 --- a/miasm2/analysis/depgraph.py +++ b/miasm2/analysis/depgraph.py @@ -1,6 +1,6 @@ """Provide dependency graph""" -from miasm2.expression.expression import ExprInt, ExprLoc, ExprAff +from miasm2.expression.expression import ExprInt, ExprLoc, ExprAssign from miasm2.core.graph import DiGraph from miasm2.core.locationdb import LocationDB from miasm2.expression.simplifications import expr_simp_explicit @@ -319,7 +319,7 @@ class DependencyResultImplicit(DependencyResult): # Z3 Solver instance _solver = None - unsat_expr = ExprAff(ExprInt(0, 1), ExprInt(1, 1)) + unsat_expr = ExprAssign(ExprInt(0, 1), ExprInt(1, 1)) def _gen_path_constraints(self, translator, expr, expected): """Generate path constraint from @expr. Handle special case with @@ -341,7 +341,7 @@ class DependencyResultImplicit(DependencyResult): conds = z3.And( conds, translator.from_expr( - ExprAff(value, + ExprAssign(value, expected)) ) out.append(conds) diff --git a/miasm2/analysis/dse.py b/miasm2/analysis/dse.py index fb332154..1a3c0259 100644 --- a/miasm2/analysis/dse.py +++ b/miasm2/analysis/dse.py @@ -56,7 +56,7 @@ except ImportError: z3 = None from miasm2.expression.expression import ExprMem, ExprInt, ExprCompose, \ - ExprAff, ExprId, ExprLoc, LocKey + ExprAssign, ExprId, ExprLoc, LocKey from miasm2.core.bin_stream import bin_stream_vm from miasm2.jitter.emulatedsymbexec import EmulatedSymbExec from miasm2.expression.expression_helper import possible_values @@ -626,14 +626,14 @@ class DSEPathConstraint(DSEEngine): target_addr = self.ir_arch.loc_db.canonize_to_exprloc( possibility.value ) - path_constraint = set() # Set of ExprAff for the possible path + path_constraint = set() # Set of ExprAssign for the possible path # Get constraint associated to the possible path memory_to_add = ModularIntervals(symb_pc.size) for cons in possibility.constraints: eaff = cons.to_constraint() # eaff.get_r(mem_read=True) is not enough - # ExprAff consider a Memory access in dst as a write + # ExprAssign consider a Memory access in dst as a write mem = eaff.dst.get_r(mem_read=True) mem.update(eaff.src.get_r(mem_read=True)) for expr in mem: @@ -663,7 +663,7 @@ class DSEPathConstraint(DSEEngine): if not value.is_int(): raise TypeError("Rely on a symbolic memory case, " \ "address 0x%x" % address) - path_constraint.add(ExprAff(expr_mem, value)) + path_constraint.add(ExprAssign(expr_mem, value)) if target_addr == cur_addr: # Add path constraint diff --git a/miasm2/analysis/ssa.py b/miasm2/analysis/ssa.py index 61aa987f..0320d117 100644 --- a/miasm2/analysis/ssa.py +++ b/miasm2/analysis/ssa.py @@ -1,6 +1,6 @@ from collections import deque -from miasm2.expression.expression import ExprId, ExprAff, ExprOp, get_expr_ids +from miasm2.expression.expression import ExprId, ExprAssign, ExprOp, get_expr_ids from miasm2.ir.ir import AssignBlock, IRBlock @@ -185,7 +185,7 @@ class SSA(object): instructions = [] for dst in assignblk: # dst = src - aff = assignblk.dst2ExprAff(dst) + aff = assignblk.dst2ExprAssign(dst) # insert memory expression into start of list if dst.is_mem(): instructions.insert(0, aff) @@ -259,7 +259,7 @@ class SSA(object): src_ssa = rhs.popleft() # rebuild SSA expression - expr = ExprAff(dst_ssa, src_ssa) + expr = ExprAssign(dst_ssa, src_ssa) self.expressions[dst_ssa] = src_ssa self.ssa_to_location[dst_ssa] = (loc_key, index) @@ -455,10 +455,10 @@ class SSADiGraph(SSA): """ Generates an empty phi function for a variable :param expr: variable - :return: ExprAff, empty phi function for expr + :return: ExprAssign, empty phi function for expr """ phi = ExprId(self.PHI_STR, expr.size) - return ExprAff(expr, phi) + return ExprAssign(expr, phi) def _fill_phi(self, *args): """ diff --git a/miasm2/arch/aarch64/sem.py b/miasm2/arch/aarch64/sem.py index 3f70d7a7..1b591f74 100644 --- a/miasm2/arch/aarch64/sem.py +++ b/miasm2/arch/aarch64/sem.py @@ -1,5 +1,5 @@ from miasm2.expression.expression import ExprId, ExprInt, ExprLoc, ExprMem, \ - ExprCond, ExprCompose, ExprOp, ExprAff + ExprCond, ExprCompose, ExprOp, ExprAssign from miasm2.ir.ir import IntermediateRepresentation, IRBlock, AssignBlock from miasm2.arch.aarch64.arch import mn_aarch64, conds_expr, replace_regs from miasm2.arch.aarch64.regs import * @@ -11,16 +11,16 @@ from miasm2.jitter.csts import EXCEPT_DIV_BY_ZERO, EXCEPT_INT_XX def update_flag_zf(a): - return [ExprAff(zf, ExprOp("FLAG_EQ", a))] + return [ExprAssign(zf, ExprOp("FLAG_EQ", a))] def update_flag_zf_eq(a, b): - return [ExprAff(zf, ExprOp("FLAG_EQ_CMP", a, b))] + return [ExprAssign(zf, ExprOp("FLAG_EQ_CMP", a, b))] def update_flag_nf(arg): return [ - ExprAff( + ExprAssign( nf, ExprOp("FLAG_SIGN_SUB", arg, ExprInt(0, arg.size)) ) @@ -41,22 +41,22 @@ def check_ops_msb(a, b, c): def update_flag_add_cf(op1, op2): "Compute cf in @op1 + @op2" - return [ExprAff(cf, ExprOp("FLAG_ADD_CF", op1, op2))] + return [ExprAssign(cf, ExprOp("FLAG_ADD_CF", op1, op2))] def update_flag_add_of(op1, op2): "Compute of in @op1 + @op2" - return [ExprAff(of, ExprOp("FLAG_ADD_OF", op1, op2))] + return [ExprAssign(of, ExprOp("FLAG_ADD_OF", op1, op2))] def update_flag_sub_cf(op1, op2): "Compote CF in @op1 - @op2" - return [ExprAff(cf, ExprOp("FLAG_SUB_CF", op1, op2) ^ ExprInt(1, 1))] + return [ExprAssign(cf, ExprOp("FLAG_SUB_CF", op1, op2) ^ ExprInt(1, 1))] def update_flag_sub_of(op1, op2): "Compote OF in @op1 - @op2" - return [ExprAff(of, ExprOp("FLAG_SUB_OF", op1, op2))] + return [ExprAssign(of, ExprOp("FLAG_SUB_OF", op1, op2))] def update_flag_arith_add_co(arg1, arg2): @@ -72,7 +72,7 @@ def update_flag_arith_add_zn(arg1, arg2): """ e = [] e += update_flag_zf_eq(arg1, -arg2) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUB", arg1, -arg2))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUB", arg1, -arg2))] return e @@ -92,17 +92,17 @@ def update_flag_arith_sub_zn(arg1, arg2): """ e = [] e += update_flag_zf_eq(arg1, arg2) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUB", arg1, arg2))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUB", arg1, arg2))] return e def update_flag_zfaddwc_eq(arg1, arg2, arg3): - return [ExprAff(zf, ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))] + return [ExprAssign(zf, ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))] def update_flag_zfsubwc_eq(arg1, arg2, arg3): - return [ExprAff(zf, ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))] + return [ExprAssign(zf, ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))] def update_flag_arith_addwc_zn(arg1, arg2, arg3): @@ -111,7 +111,7 @@ def update_flag_arith_addwc_zn(arg1, arg2, arg3): """ e = [] e += update_flag_zfaddwc_eq(arg1, arg2, arg3) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))] return e @@ -121,18 +121,18 @@ def update_flag_arith_subwc_zn(arg1, arg2, arg3): """ e = [] e += update_flag_zfsubwc_eq(arg1, arg2, arg3) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))] return e def update_flag_addwc_cf(op1, op2, op3): "Compute cf in @res = @op1 + @op2 + @op3" - return [ExprAff(cf, ExprOp("FLAG_ADDWC_CF", op1, op2, op3))] + return [ExprAssign(cf, ExprOp("FLAG_ADDWC_CF", op1, op2, op3))] def update_flag_addwc_of(op1, op2, op3): "Compute of in @res = @op1 + @op2 + @op3" - return [ExprAff(of, ExprOp("FLAG_ADDWC_OF", op1, op2, op3))] + return [ExprAssign(of, ExprOp("FLAG_ADDWC_OF", op1, op2, op3))] def update_flag_arith_addwc_co(arg1, arg2, arg3): @@ -145,12 +145,12 @@ def update_flag_arith_addwc_co(arg1, arg2, arg3): def update_flag_subwc_cf(op1, op2, op3): "Compute cf in @res = @op1 + @op2 + @op3" - return [ExprAff(cf, ExprOp("FLAG_SUBWC_CF", op1, op2, op3) ^ ExprInt(1, 1))] + return [ExprAssign(cf, ExprOp("FLAG_SUBWC_CF", op1, op2, op3) ^ ExprInt(1, 1))] def update_flag_subwc_of(op1, op2, op3): "Compute of in @res = @op1 + @op2 + @op3" - return [ExprAff(of, ExprOp("FLAG_SUBWC_OF", op1, op2, op3))] + return [ExprAssign(of, ExprOp("FLAG_SUBWC_OF", op1, op2, op3))] def update_flag_arith_subwc_co(arg1, arg2, arg3): @@ -290,10 +290,10 @@ def bics(ir, instr, arg1, arg2, arg3): e = [] tmp1, tmp2 = arg2, (~extend_arg(arg2, arg3)) - e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', tmp1, tmp2))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', tmp1, tmp2))] e += update_flag_nf(res) - e.append(ExprAff(arg1, res)) + e.append(ExprAssign(arg1, res)) e += null_flag_co() return e, [] @@ -312,7 +312,7 @@ def adds(ir, instr, arg1, arg2, arg3): e += update_flag_arith_add_zn(arg2, arg3) e += update_flag_arith_add_co(arg2, arg3) - e.append(ExprAff(arg1, res)) + e.append(ExprAssign(arg1, res)) return e, [] @@ -326,7 +326,7 @@ def subs(ir, instr, arg1, arg2, arg3): e += update_flag_arith_sub_zn(arg2, arg3) e += update_flag_arith_sub_co(arg2, arg3) - e.append(ExprAff(arg1, res)) + e.append(ExprAssign(arg1, res)) return e, [] @@ -355,10 +355,10 @@ def ands(ir, instr, arg1, arg2, arg3): arg3 = extend_arg(arg2, arg3) res = arg2 & arg3 - e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', arg2, arg3))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', arg2, arg3))] e += update_flag_nf(res) - e.append(ExprAff(arg1, res)) + e.append(ExprAssign(arg1, res)) return e, [] def tst(ir, instr, arg1, arg2): @@ -366,7 +366,7 @@ def tst(ir, instr, arg1, arg2): arg2 = extend_arg(arg1, arg2) res = arg1 & arg2 - e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', arg1, arg2))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', arg1, arg2))] e += update_flag_nf(res) return e, [] @@ -401,9 +401,9 @@ def movk(ir, instr, arg1, arg2): isinstance(arg2.args[1], ExprInt)) value, shift = int(arg2.args[0].arg), int(arg2.args[1]) e.append( - ExprAff(arg1[shift:shift + 16], ExprInt(value, 16))) + ExprAssign(arg1[shift:shift + 16], ExprInt(value, 16))) else: - e.append(ExprAff(arg1[:16], ExprInt(int(arg2), 16))) + e.append(ExprAssign(arg1[:16], ExprInt(int(arg2), 16))) return e, [] @@ -444,16 +444,16 @@ def ccmp(ir, instr, arg1, arg2, arg3, arg4): new_cf = update_flag_sub_cf(arg1, arg2).src new_of = update_flag_sub_of(arg1, arg2).src - e.append(ExprAff(nf, ExprCond(cond_expr, + e.append(ExprAssign(nf, ExprCond(cond_expr, new_nf, default_nf))) - e.append(ExprAff(zf, ExprCond(cond_expr, + e.append(ExprAssign(zf, ExprCond(cond_expr, new_zf, default_zf))) - e.append(ExprAff(cf, ExprCond(cond_expr, + e.append(ExprAssign(cf, ExprCond(cond_expr, new_cf, default_cf))) - e.append(ExprAff(of, ExprCond(cond_expr, + e.append(ExprAssign(of, ExprCond(cond_expr, new_of, default_of))) return e, [] @@ -463,7 +463,7 @@ def csinc(ir, instr, arg1, arg2, arg3, arg4): e = [] cond_expr = cond2expr[arg4.name] e.append( - ExprAff( + ExprAssign( arg1, ExprCond( cond_expr, @@ -479,7 +479,7 @@ def csinv(ir, instr, arg1, arg2, arg3, arg4): e = [] cond_expr = cond2expr[arg4.name] e.append( - ExprAff( + ExprAssign( arg1, ExprCond( cond_expr, @@ -494,7 +494,7 @@ def csneg(ir, instr, arg1, arg2, arg3, arg4): e = [] cond_expr = cond2expr[arg4.name] e.append( - ExprAff( + ExprAssign( arg1, ExprCond( cond_expr, @@ -509,7 +509,7 @@ def cset(ir, instr, arg1, arg2): e = [] cond_expr = cond2expr[arg2.name] e.append( - ExprAff( + ExprAssign( arg1, ExprCond( cond_expr, @@ -525,7 +525,7 @@ def csetm(ir, instr, arg1, arg2): e = [] cond_expr = cond2expr[arg2.name] e.append( - ExprAff( + ExprAssign( arg1, ExprCond( cond_expr, @@ -562,11 +562,11 @@ def get_mem_access(mem): raise NotImplementedError('bad op') elif mem.op == "postinc": addr, off = mem.args - updt = ExprAff(addr, addr + off) + updt = ExprAssign(addr, addr + off) elif mem.op == "preinc_wb": base, off = mem.args addr = base + off - updt = ExprAff(base, base + off) + updt = ExprAssign(base, base + off) else: raise NotImplementedError('bad op') else: @@ -578,7 +578,7 @@ def get_mem_access(mem): def ldr(ir, instr, arg1, arg2): e = [] addr, updt = get_mem_access(arg2) - e.append(ExprAff(arg1, ExprMem(addr, arg1.size))) + e.append(ExprAssign(arg1, ExprMem(addr, arg1.size))) if updt: e.append(updt) return e, [] @@ -588,7 +588,7 @@ def ldr_size(ir, instr, arg1, arg2, size): e = [] addr, updt = get_mem_access(arg2) e.append( - ExprAff(arg1, ExprMem(addr, size).zeroExtend(arg1.size))) + ExprAssign(arg1, ExprMem(addr, size).zeroExtend(arg1.size))) if updt: e.append(updt) return e, [] @@ -606,7 +606,7 @@ def ldrs_size(ir, instr, arg1, arg2, size): e = [] addr, updt = get_mem_access(arg2) e.append( - ExprAff(arg1, ExprMem(addr, size).signExtend(arg1.size))) + ExprAssign(arg1, ExprMem(addr, size).signExtend(arg1.size))) if updt: e.append(updt) return e, [] @@ -628,7 +628,7 @@ def ldrsw(ir, instr, arg1, arg2): def l_str(ir, instr, arg1, arg2): e = [] addr, updt = get_mem_access(arg2) - e.append(ExprAff(ExprMem(addr, arg1.size), arg1)) + e.append(ExprAssign(ExprMem(addr, arg1.size), arg1)) if updt: e.append(updt) return e, [] @@ -637,7 +637,7 @@ def l_str(ir, instr, arg1, arg2): def strb(ir, instr, arg1, arg2): e = [] addr, updt = get_mem_access(arg2) - e.append(ExprAff(ExprMem(addr, 8), arg1[:8])) + e.append(ExprAssign(ExprMem(addr, 8), arg1[:8])) if updt: e.append(updt) return e, [] @@ -646,7 +646,7 @@ def strb(ir, instr, arg1, arg2): def strh(ir, instr, arg1, arg2): e = [] addr, updt = get_mem_access(arg2) - e.append(ExprAff(ExprMem(addr, 16), arg1[:16])) + e.append(ExprAssign(ExprMem(addr, 16), arg1[:16])) if updt: e.append(updt) return e, [] @@ -655,9 +655,9 @@ def strh(ir, instr, arg1, arg2): def stp(ir, instr, arg1, arg2, arg3): e = [] addr, updt = get_mem_access(arg3) - e.append(ExprAff(ExprMem(addr, arg1.size), arg1)) + e.append(ExprAssign(ExprMem(addr, arg1.size), arg1)) e.append( - ExprAff(ExprMem(addr + ExprInt(arg1.size / 8, addr.size), arg2.size), arg2)) + ExprAssign(ExprMem(addr + ExprInt(arg1.size / 8, addr.size), arg2.size), arg2)) if updt: e.append(updt) return e, [] @@ -666,9 +666,9 @@ def stp(ir, instr, arg1, arg2, arg3): def ldp(ir, instr, arg1, arg2, arg3): e = [] addr, updt = get_mem_access(arg3) - e.append(ExprAff(arg1, ExprMem(addr, arg1.size))) + e.append(ExprAssign(arg1, ExprMem(addr, arg1.size))) e.append( - ExprAff(arg2, ExprMem(addr + ExprInt(arg1.size / 8, addr.size), arg2.size))) + ExprAssign(arg2, ExprMem(addr + ExprInt(arg1.size / 8, addr.size), arg2.size))) if updt: e.append(updt) return e, [] @@ -682,7 +682,7 @@ def sbfm(ir, instr, arg1, arg2, arg3, arg4): else: shift = ExprInt(arg2.size - rim, arg2.size) res = (arg2[:sim].signExtend(arg1.size) << shift) - e.append(ExprAff(arg1, res)) + e.append(ExprAssign(arg1, res)) return e, [] @@ -694,7 +694,7 @@ def ubfm(ir, instr, arg1, arg2, arg3, arg4): else: shift = ExprInt(arg2.size - rim, arg2.size) res = (arg2[:sim].zeroExtend(arg1.size) << shift) - e.append(ExprAff(arg1, res)) + e.append(ExprAssign(arg1, res)) return e, [] def bfm(ir, instr, arg1, arg2, arg3, arg4): @@ -702,12 +702,12 @@ def bfm(ir, instr, arg1, arg2, arg3, arg4): rim, sim = int(arg3.arg), int(arg4) + 1 if sim > rim: res = arg2[rim:sim] - e.append(ExprAff(arg1[:sim-rim], res)) + e.append(ExprAssign(arg1[:sim-rim], res)) else: shift_i = arg2.size - rim shift = ExprInt(shift_i, arg2.size) res = arg2[:sim] - e.append(ExprAff(arg1[shift_i:shift_i+sim], res)) + e.append(ExprAssign(arg1[shift_i:shift_i+sim], res)) return e, [] @@ -721,7 +721,7 @@ def mrs(ir, insr, arg1, arg2, arg3, arg4, arg5): out.append(cf) out.append(zf) out.append(nf) - e.append(ExprAff(arg1, ExprCompose(*out).zeroExtend(arg1.size))) + e.append(ExprAssign(arg1, ExprCompose(*out).zeroExtend(arg1.size))) else: raise NotImplementedError("MRS not implemented") return e, [] @@ -730,10 +730,10 @@ def msr(ir, instr, arg1, arg2, arg3, arg4, arg5): e = [] if arg1.is_int(3) and arg2.is_id("c4") and arg3.is_id("c2") and arg4.is_int(0): - e.append(ExprAff(nf, arg5[31:32])) - e.append(ExprAff(zf, arg5[30:31])) - e.append(ExprAff(cf, arg5[29:30])) - e.append(ExprAff(of, arg5[28:29])) + e.append(ExprAssign(nf, arg5[31:32])) + e.append(ExprAssign(zf, arg5[30:31])) + e.append(ExprAssign(cf, arg5[29:30])) + e.append(ExprAssign(of, arg5[28:29])) else: raise NotImplementedError("MSR not implemented") return e, [] @@ -744,7 +744,7 @@ def adc(ir, instr, arg1, arg2, arg3): arg3 = extend_arg(arg2, arg3) e = [] r = arg2 + arg3 + cf.zeroExtend(arg3.size) - e.append(ExprAff(arg1, r)) + e.append(ExprAssign(arg1, r)) return e, [] @@ -752,7 +752,7 @@ def adcs(ir, instr, arg1, arg2, arg3): arg3 = extend_arg(arg2, arg3) e = [] r = arg2 + arg3 + cf.zeroExtend(arg3.size) - e.append(ExprAff(arg1, r)) + e.append(ExprAssign(arg1, r)) e += update_flag_arith_addwc_zn(arg2, arg3, cf) e += update_flag_arith_addwc_co(arg2, arg3, cf) return e, [] @@ -762,7 +762,7 @@ def sbc(ir, instr, arg1, arg2, arg3): arg3 = extend_arg(arg2, arg3) e = [] r = arg2 - (arg3 + (~cf).zeroExtend(arg3.size)) - e.append(ExprAff(arg1, r)) + e.append(ExprAssign(arg1, r)) return e, [] @@ -770,7 +770,7 @@ def sbcs(ir, instr, arg1, arg2, arg3): arg3 = extend_arg(arg2, arg3) e = [] r = arg2 - (arg3 + (~cf).zeroExtend(arg3.size)) - e.append(ExprAff(arg1, r)) + e.append(ExprAssign(arg1, r)) e += update_flag_arith_subwc_zn(arg2, arg3, ~cf) e += update_flag_arith_subwc_co(arg2, arg3, ~cf) return e, [] @@ -956,7 +956,7 @@ def rev(ir, instr, arg1, arg2): out.reverse() e = [] result = ExprCompose(*out) - e.append(ExprAff(arg1, result)) + e.append(ExprAssign(arg1, result)) return e, [] @@ -1088,7 +1088,7 @@ class ir_aarch64l(IntermediateRepresentation): def expraff_fix_regs_for_mode(self, e): dst = self.expr_fix_regs_for_mode(e.dst) src = self.expr_fix_regs_for_mode(e.src) - return ExprAff(dst, src) + return ExprAssign(dst, src) def irbloc_fix_regs_for_mode(self, irblock, mode=64): irs = [] @@ -1119,7 +1119,7 @@ class ir_aarch64l(IntermediateRepresentation): if dst != self.pc: dst = dst.replace_expr(pc_fixed) src = src.replace_expr(pc_fixed) - instr_ir[i] = ExprAff(dst, src) + instr_ir[i] = ExprAssign(dst, src) for idx, irblock in enumerate(extra_ir): extra_ir[idx] = irblock.modify_exprs(lambda expr: expr.replace_expr(pc_fixed) \ diff --git a/miasm2/arch/arm/ira.py b/miasm2/arch/arm/ira.py index fd8096d7..2214c626 100644 --- a/miasm2/arch/arm/ira.py +++ b/miasm2/arch/arm/ira.py @@ -3,7 +3,7 @@ from miasm2.ir.analysis import ira from miasm2.ir.ir import IRBlock from miasm2.arch.arm.sem import ir_arml, ir_armtl, ir_armb, ir_armtb, tab_cond -from miasm2.expression.expression import ExprAff, ExprOp, ExprLoc, ExprCond +from miasm2.expression.expression import ExprAssign, ExprOp, ExprLoc, ExprCond from miasm2.ir.ir import AssignBlock class ir_a_arml_base(ir_arml, ira): @@ -26,7 +26,7 @@ class ir_a_arml(ir_a_arml_base): def call_effects(self, ad, instr): call_assignblk = AssignBlock( [ - ExprAff( + ExprAssign( self.ret_reg, ExprOp( 'call_func_ret', @@ -37,7 +37,7 @@ class ir_a_arml(ir_a_arml_base): self.arch.regs.R3, ) ), - ExprAff( + ExprAssign( self.sp, ExprOp('call_func_stack', ad, self.sp) ), @@ -61,11 +61,11 @@ class ir_a_arml(ir_a_arml_base): call_assignblks = [ call_assignblk, - AssignBlock([ExprAff(self.IRDst, loc_next_expr)], instr), + AssignBlock([ExprAssign(self.IRDst, loc_next_expr)], instr), ] e_do = IRBlock(loc_do, call_assignblks) assignblks_out = [ - AssignBlock([ExprAff(self.IRDst, dst_cond)], instr) + AssignBlock([ExprAssign(self.IRDst, dst_cond)], instr) ] return assignblks_out, [e_do] diff --git a/miasm2/arch/arm/jit.py b/miasm2/arch/arm/jit.py index 716a8826..551d761a 100644 --- a/miasm2/arch/arm/jit.py +++ b/miasm2/arch/arm/jit.py @@ -5,7 +5,7 @@ from miasm2.core.locationdb import LocationDB from miasm2.core.utils import pck32, upck32 from miasm2.arch.arm.sem import ir_armb, ir_arml, ir_armtl, ir_armtb, cond_dct_inv, tab_cond from miasm2.jitter.codegen import CGen -from miasm2.expression.expression import ExprId, ExprAff, ExprCond +from miasm2.expression.expression import ExprId, ExprAssign, ExprCond from miasm2.ir.ir import IRBlock, AssignBlock from miasm2.ir.translators.C import TranslatorC from miasm2.expression.simplifications import expr_simp_high_to_explicit diff --git a/miasm2/arch/arm/sem.py b/miasm2/arch/arm/sem.py index 600ad586..f955b585 100644 --- a/miasm2/arch/arm/sem.py +++ b/miasm2/arch/arm/sem.py @@ -14,16 +14,16 @@ EXCEPT_PRIV_INSN = (1 << 17) def update_flag_zf(a): - return [ExprAff(zf, ExprOp("FLAG_EQ", a))] + return [ExprAssign(zf, ExprOp("FLAG_EQ", a))] def update_flag_zf_eq(a, b): - return [ExprAff(zf, ExprOp("FLAG_EQ_CMP", a, b))] + return [ExprAssign(zf, ExprOp("FLAG_EQ_CMP", a, b))] def update_flag_nf(arg): return [ - ExprAff( + ExprAssign( nf, ExprOp("FLAG_SIGN_SUB", arg, ExprInt(0, arg.size)) ) @@ -47,22 +47,22 @@ def check_ops_msb(a, b, c): def update_flag_add_cf(op1, op2): "Compute cf in @op1 + @op2" - return [ExprAff(cf, ExprOp("FLAG_ADD_CF", op1, op2))] + return [ExprAssign(cf, ExprOp("FLAG_ADD_CF", op1, op2))] def update_flag_add_of(op1, op2): "Compute of in @op1 + @op2" - return [ExprAff(of, ExprOp("FLAG_ADD_OF", op1, op2))] + return [ExprAssign(of, ExprOp("FLAG_ADD_OF", op1, op2))] def update_flag_sub_cf(op1, op2): "Compote CF in @op1 - @op2" - return [ExprAff(cf, ExprOp("FLAG_SUB_CF", op1, op2) ^ ExprInt(1, 1))] + return [ExprAssign(cf, ExprOp("FLAG_SUB_CF", op1, op2) ^ ExprInt(1, 1))] def update_flag_sub_of(op1, op2): "Compote OF in @op1 - @op2" - return [ExprAff(of, ExprOp("FLAG_SUB_OF", op1, op2))] + return [ExprAssign(of, ExprOp("FLAG_SUB_OF", op1, op2))] def update_flag_arith_add_co(arg1, arg2): @@ -78,7 +78,7 @@ def update_flag_arith_add_zn(arg1, arg2): """ e = [] e += update_flag_zf_eq(arg1, -arg2) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUB", arg1, -arg2))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUB", arg1, -arg2))] return e @@ -98,17 +98,17 @@ def update_flag_arith_sub_zn(arg1, arg2): """ e = [] e += update_flag_zf_eq(arg1, arg2) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUB", arg1, arg2))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUB", arg1, arg2))] return e def update_flag_zfaddwc_eq(arg1, arg2, arg3): - return [ExprAff(zf, ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))] + return [ExprAssign(zf, ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))] def update_flag_zfsubwc_eq(arg1, arg2, arg3): - return [ExprAff(zf, ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))] + return [ExprAssign(zf, ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))] def update_flag_arith_addwc_zn(arg1, arg2, arg3): @@ -117,7 +117,7 @@ def update_flag_arith_addwc_zn(arg1, arg2, arg3): """ e = [] e += update_flag_zfaddwc_eq(arg1, arg2, arg3) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))] return e @@ -127,18 +127,18 @@ def update_flag_arith_subwc_zn(arg1, arg2, arg3): """ e = [] e += update_flag_zfsubwc_eq(arg1, arg2, arg3) - e += [ExprAff(nf, ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))] + e += [ExprAssign(nf, ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))] return e def update_flag_addwc_cf(op1, op2, op3): "Compute cf in @res = @op1 + @op2 + @op3" - return [ExprAff(cf, ExprOp("FLAG_ADDWC_CF", op1, op2, op3))] + return [ExprAssign(cf, ExprOp("FLAG_ADDWC_CF", op1, op2, op3))] def update_flag_addwc_of(op1, op2, op3): "Compute of in @res = @op1 + @op2 + @op3" - return [ExprAff(of, ExprOp("FLAG_ADDWC_OF", op1, op2, op3))] + return [ExprAssign(of, ExprOp("FLAG_ADDWC_OF", op1, op2, op3))] def update_flag_arith_addwc_co(arg1, arg2, arg3): @@ -151,12 +151,12 @@ def update_flag_arith_addwc_co(arg1, arg2, arg3): def update_flag_subwc_cf(op1, op2, op3): "Compute cf in @res = @op1 + @op2 + @op3" - return [ExprAff(cf, ExprOp("FLAG_SUBWC_CF", op1, op2, op3) ^ ExprInt(1, 1))] + return [ExprAssign(cf, ExprOp("FLAG_SUBWC_CF", op1, op2, op3) ^ ExprInt(1, 1))] def update_flag_subwc_of(op1, op2, op3): "Compute of in @res = @op1 + @op2 + @op3" - return [ExprAff(of, ExprOp("FLAG_SUBWC_OF", op1, op2, op3))] + return [ExprAssign(of, ExprOp("FLAG_SUBWC_OF", op1, op2, op3))] def update_flag_arith_subwc_co(arg1, arg2, arg3): @@ -184,10 +184,10 @@ def adc(ir, instr, a, b, c=None): if instr.name == 'ADCS' and a != PC: e += update_flag_arith_addwc_zn(arg1, arg2, cf) e += update_flag_arith_addwc_co(arg1, arg2, cf) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -200,10 +200,10 @@ def add(ir, instr, a, b, c=None): if instr.name == 'ADDS' and a != PC: e += update_flag_arith_add_zn(arg1, arg2) e += update_flag_arith_add_co(arg1, arg2) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -213,13 +213,13 @@ def l_and(ir, instr, a, b, c=None): b, c = a, b r = b & c if instr.name == 'ANDS' and a != PC: - e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', b, c))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', b, c))] e += update_flag_nf(r) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -228,10 +228,10 @@ def sub(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b - c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -243,10 +243,10 @@ def subs(ir, instr, a, b, c=None): r = b - c e += update_flag_arith_sub_zn(arg1, arg2) e += update_flag_arith_sub_co(arg1, arg2) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -255,10 +255,10 @@ def eor(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b ^ c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -269,13 +269,13 @@ def eors(ir, instr, a, b, c=None): arg1, arg2 = b, c r = arg1 ^ arg2 - e += [ExprAff(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))] e += update_flag_nf(r) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -285,10 +285,10 @@ def rsb(ir, instr, a, b, c=None): b, c = a, b arg1, arg2 = c, b r = arg1 - arg2 - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -300,10 +300,10 @@ def rsbs(ir, instr, a, b, c=None): r = arg1 - arg2 e += update_flag_arith_sub_zn(arg1, arg2) e += update_flag_arith_sub_co(arg1, arg2) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -313,10 +313,10 @@ def sbc(ir, instr, a, b, c=None): b, c = a, b arg1, arg2 = b, c r = arg1 - (arg2 + (~cf).zeroExtend(32)) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -330,10 +330,10 @@ def sbcs(ir, instr, a, b, c=None): e += update_flag_arith_subwc_zn(arg1, arg2, ~cf) e += update_flag_arith_subwc_co(arg1, arg2, ~cf) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -343,10 +343,10 @@ def rsc(ir, instr, a, b, c=None): b, c = a, b arg1, arg2 = c, b r = arg1 - (arg2 + (~cf).zeroExtend(32)) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -360,11 +360,11 @@ def rscs(ir, instr, a, b, c=None): e += update_flag_arith_subwc_zn(arg1, arg2, ~cf) e += update_flag_arith_subwc_co(arg1, arg2, ~cf) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -373,7 +373,7 @@ def tst(ir, instr, a, b): arg1, arg2 = a, b r = arg1 & arg2 - e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', arg1, arg2))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', arg1, arg2))] e += update_flag_nf(r) return e, [] @@ -386,7 +386,7 @@ def teq(ir, instr, a, b, c=None): arg1, arg2 = b, c r = arg1 ^ arg2 - e += [ExprAff(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_CMP', arg1, arg2))] e += update_flag_nf(r) return e, [] @@ -417,10 +417,10 @@ def orr(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b | c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -429,10 +429,10 @@ def orn(ir, instr, a, b, c=None): if c is None: b, c = a, b r = ~(b | c) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -443,66 +443,66 @@ def orrs(ir, instr, a, b, c=None): arg1, arg2 = b, c r = arg1 | arg2 - e += [ExprAff(zf, ExprOp('FLAG_EQ', r))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))] e += update_flag_nf(r) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def mov(ir, instr, a, b): - e = [ExprAff(a, b)] + e = [ExprAssign(a, b)] dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, b)) + e.append(ExprAssign(ir.IRDst, b)) return e, [] def movt(ir, instr, a, b): r = a | b << ExprInt(16, 32) - e = [ExprAff(a, r)] + e = [ExprAssign(a, r)] dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def movs(ir, instr, a, b): e = [] - e.append(ExprAff(a, b)) + e.append(ExprAssign(a, b)) # XXX TODO check - e += [ExprAff(zf, ExprOp('FLAG_EQ', b))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', b))] e += update_flag_nf(b) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, b)) + e.append(ExprAssign(ir.IRDst, b)) return e, [] def mvn(ir, instr, a, b): r = b ^ ExprInt(-1, 32) - e = [ExprAff(a, r)] + e = [ExprAssign(a, r)] dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def mvns(ir, instr, a, b): e = [] r = b ^ ExprInt(-1, 32) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) # XXX TODO check - e += [ExprAff(zf, ExprOp('FLAG_EQ', r))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))] e += update_flag_nf(r) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -516,7 +516,7 @@ def mrs(ir, instr, a, b): out.append(cf) out.append(zf) out.append(nf) - e.append(ExprAff(a, ExprCompose(*out))) + e.append(ExprAssign(a, ExprCompose(*out))) else: raise NotImplementedError("MRS not implemented") return e, [] @@ -524,10 +524,10 @@ def mrs(ir, instr, a, b): def msr(ir, instr, a, b): e = [] if a.is_id('CPSR_cf'): - e.append(ExprAff(nf, b[31:32])) - e.append(ExprAff(zf, b[30:31])) - e.append(ExprAff(cf, b[29:30])) - e.append(ExprAff(of, b[28:29])) + e.append(ExprAssign(nf, b[31:32])) + e.append(ExprAssign(zf, b[30:31])) + e.append(ExprAssign(cf, b[29:30])) + e.append(ExprAssign(of, b[28:29])) else: raise NotImplementedError("MSR not implemented") return e, [] @@ -536,10 +536,10 @@ def msr(ir, instr, a, b): def neg(ir, instr, a, b): e = [] r = - b - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def negs(ir, instr, a, b): @@ -550,10 +550,10 @@ def bic(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b & (c ^ ExprInt(-1, 32)) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -564,13 +564,13 @@ def bics(ir, instr, a, b, c=None): tmp1, tmp2 = b, ~c r = tmp1 & tmp2 - e += [ExprAff(zf, ExprOp('FLAG_EQ_AND', tmp1, tmp2))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ_AND', tmp1, tmp2))] e += update_flag_nf(r) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -583,23 +583,23 @@ def sdiv(ir, instr, a, b, c=None): loc_except = ExprId(ir.loc_db.add_location(), ir.IRDst.size) loc_next = ExprLoc(ir.get_next_loc_key(instr), ir.IRDst.size) - e.append(ExprAff(ir.IRDst, ExprCond(c, loc_div, loc_except))) + e.append(ExprAssign(ir.IRDst, ExprCond(c, loc_div, loc_except))) do_except = [] - do_except.append(ExprAff(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size))) - do_except.append(ExprAff(ir.IRDst, loc_next)) + do_except.append(ExprAssign(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size))) + do_except.append(ExprAssign(ir.IRDst, loc_next)) blk_except = IRBlock(loc_except.loc_key, [AssignBlock(do_except, instr)]) r = ExprOp("idiv", b, c) do_div = [] - do_div.append(ExprAff(a, r)) + do_div.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - do_div.append(ExprAff(ir.IRDst, r)) + do_div.append(ExprAssign(ir.IRDst, r)) - do_div.append(ExprAff(ir.IRDst, loc_next)) + do_div.append(ExprAssign(ir.IRDst, loc_next)) blk_div = IRBlock(loc_div.loc_key, [AssignBlock(do_div, instr)]) return e, [blk_div, blk_except] @@ -616,22 +616,22 @@ def udiv(ir, instr, a, b, c=None): loc_except = ExprLoc(ir.loc_db.add_location(), ir.IRDst.size) loc_next = ExprLoc(ir.get_next_loc_key(instr), ir.IRDst.size) - e.append(ExprAff(ir.IRDst, ExprCond(c, loc_div, loc_except))) + e.append(ExprAssign(ir.IRDst, ExprCond(c, loc_div, loc_except))) do_except = [] - do_except.append(ExprAff(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size))) - do_except.append(ExprAff(ir.IRDst, loc_next)) + do_except.append(ExprAssign(exception_flags, ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size))) + do_except.append(ExprAssign(ir.IRDst, loc_next)) blk_except = IRBlock(loc_except.loc_key, [AssignBlock(do_except, instr)]) r = ExprOp("udiv", b, c) do_div = [] - do_div.append(ExprAff(a, r)) + do_div.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - do_div.append(ExprAff(ir.IRDst, r)) + do_div.append(ExprAssign(ir.IRDst, r)) - do_div.append(ExprAff(ir.IRDst, loc_next)) + do_div.append(ExprAssign(ir.IRDst, loc_next)) blk_div = IRBlock(loc_div.loc_key, [AssignBlock(do_div, instr)]) return e, [blk_div, blk_except] @@ -640,10 +640,10 @@ def udiv(ir, instr, a, b, c=None): def mla(ir, instr, a, b, c, d): e = [] r = (b * c) + d - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -651,20 +651,20 @@ def mlas(ir, instr, a, b, c, d): e = [] r = (b * c) + d e += update_flag_zn(r) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def mls(ir, instr, a, b, c, d): e = [] r = d - (b * c) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -673,10 +673,10 @@ def mul(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b * c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -686,73 +686,73 @@ def muls(ir, instr, a, b, c=None): b, c = a, b r = b * c e += update_flag_zn(r) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def umull(ir, instr, a, b, c, d): e = [] r = c.zeroExtend(64) * d.zeroExtend(64) - e.append(ExprAff(a, r[0:32])) - e.append(ExprAff(b, r[32:64])) + e.append(ExprAssign(a, r[0:32])) + e.append(ExprAssign(b, r[32:64])) # r15/IRDst not allowed as output return e, [] def umlal(ir, instr, a, b, c, d): e = [] r = c.zeroExtend(64) * d.zeroExtend(64) + ExprCompose(a, b) - e.append(ExprAff(a, r[0:32])) - e.append(ExprAff(b, r[32:64])) + e.append(ExprAssign(a, r[0:32])) + e.append(ExprAssign(b, r[32:64])) # r15/IRDst not allowed as output return e, [] def smull(ir, instr, a, b, c, d): e = [] r = c.signExtend(64) * d.signExtend(64) - e.append(ExprAff(a, r[0:32])) - e.append(ExprAff(b, r[32:64])) + e.append(ExprAssign(a, r[0:32])) + e.append(ExprAssign(b, r[32:64])) # r15/IRDst not allowed as output return e, [] def smlal(ir, instr, a, b, c, d): e = [] r = c.signExtend(64) * d.signExtend(64) + ExprCompose(a, b) - e.append(ExprAff(a, r[0:32])) - e.append(ExprAff(b, r[32:64])) + e.append(ExprAssign(a, r[0:32])) + e.append(ExprAssign(b, r[32:64])) # r15/IRDst not allowed as output return e, [] def b(ir, instr, a): e = [] - e.append(ExprAff(PC, a)) - e.append(ExprAff(ir.IRDst, a)) + e.append(ExprAssign(PC, a)) + e.append(ExprAssign(ir.IRDst, a)) return e, [] def bl(ir, instr, a): e = [] l = ExprInt(instr.offset + instr.l, 32) - e.append(ExprAff(PC, a)) - e.append(ExprAff(ir.IRDst, a)) - e.append(ExprAff(LR, l)) + e.append(ExprAssign(PC, a)) + e.append(ExprAssign(ir.IRDst, a)) + e.append(ExprAssign(LR, l)) return e, [] def bx(ir, instr, a): e = [] - e.append(ExprAff(PC, a)) - e.append(ExprAff(ir.IRDst, a)) + e.append(ExprAssign(PC, a)) + e.append(ExprAssign(ir.IRDst, a)) return e, [] def blx(ir, instr, a): e = [] l = ExprInt(instr.offset + instr.l, 32) - e.append(ExprAff(PC, a)) - e.append(ExprAff(ir.IRDst, a)) - e.append(ExprAff(LR, l)) + e.append(ExprAssign(PC, a)) + e.append(ExprAssign(ir.IRDst, a)) + e.append(ExprAssign(LR, l)) return e, [] @@ -804,20 +804,20 @@ def st_ld_r(ir, instr, a, a2, b, store=False, size=32, s_ext=False, z_ext=False) dst = None if store: - e.append(ExprAff(m, a)) + e.append(ExprAssign(m, a)) if dmem: - e.append(ExprAff(ExprMem(ad + ExprInt(4, 32), size=size), a2)) + e.append(ExprAssign(ExprMem(ad + ExprInt(4, 32), size=size), a2)) else: if a == PC: dst = PC - e.append(ExprAff(ir.IRDst, m)) - e.append(ExprAff(a, m)) + e.append(ExprAssign(ir.IRDst, m)) + e.append(ExprAssign(a, m)) if dmem: - e.append(ExprAff(a2, ExprMem(ad + ExprInt(4, 32), size=size))) + e.append(ExprAssign(a2, ExprMem(ad + ExprInt(4, 32), size=size))) # XXX TODO check multiple write cause by wb if wb or postinc: - e.append(ExprAff(base, base + off)) + e.append(ExprAssign(base, base + off)) return e, [] @@ -890,17 +890,17 @@ def st_ld_m(ir, instr, a, b, store=False, postinc=False, updown=False): for i, r in enumerate(regs): ad = base + ExprInt(i * step, 32) if store: - e.append(ExprAff(ExprMem(ad, 32), r)) + e.append(ExprAssign(ExprMem(ad, 32), r)) else: - e.append(ExprAff(r, ExprMem(ad, 32))) + e.append(ExprAssign(r, ExprMem(ad, 32))) if r == PC: - e.append(ExprAff(ir.IRDst, ExprMem(ad, 32))) + e.append(ExprAssign(ir.IRDst, ExprMem(ad, 32))) # XXX TODO check multiple write cause by wb if wb: if postinc: - e.append(ExprAff(a, base + ExprInt(len(regs) * step, 32))) + e.append(ExprAssign(a, base + ExprInt(len(regs) * step, 32))) else: - e.append(ExprAff(a, base + ExprInt((len(regs) - 1) * step, 32))) + e.append(ExprAssign(a, base + ExprInt((len(regs) - 1) * step, 32))) if store: pass else: @@ -944,8 +944,8 @@ def stmdb(ir, instr, a, b): def svc(ir, instr, a): e = [] except_int = EXCEPT_INT_XX - e.append(ExprAff(exception_flags, ExprInt(except_int, 32))) - e.append(ExprAff(interrupt_num, a)) + e.append(ExprAssign(exception_flags, ExprInt(except_int, 32))) + e.append(ExprAssign(interrupt_num, a)) return e, [] @@ -960,10 +960,10 @@ def lsr(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b >> c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -972,14 +972,14 @@ def lsrs(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b >> c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) - e += [ExprAff(zf, ExprOp('FLAG_EQ', r))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))] e += update_flag_nf(r) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def asr(ir, instr, a, b, c=None): @@ -987,10 +987,10 @@ def asr(ir, instr, a, b, c=None): if c is None: b, c = a, b r = ExprOp("a>>", b, c) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def asrs(ir, instr, a, b, c=None): @@ -998,14 +998,14 @@ def asrs(ir, instr, a, b, c=None): if c is None: b, c = a, b r = ExprOp("a>>", b, c) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) - e += [ExprAff(zf, ExprOp('FLAG_EQ', r))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))] e += update_flag_nf(r) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def lsl(ir, instr, a, b, c=None): @@ -1013,10 +1013,10 @@ def lsl(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b << c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -1025,28 +1025,28 @@ def lsls(ir, instr, a, b, c=None): if c is None: b, c = a, b r = b << c - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) - e += [ExprAff(zf, ExprOp('FLAG_EQ', r))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))] e += update_flag_nf(r) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def rors(ir, instr, a, b): e = [] r = ExprOp(">>>", a, b) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) - e += [ExprAff(zf, ExprOp('FLAG_EQ', r))] + e += [ExprAssign(zf, ExprOp('FLAG_EQ', r))] e += update_flag_nf(r) dst = get_dst(a) if dst is not None: - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -1055,9 +1055,9 @@ def push(ir, instr, a): regs = list(a.args) for i in xrange(len(regs)): r = SP + ExprInt(-4 * len(regs) + 4 * i, 32) - e.append(ExprAff(ExprMem(r, 32), regs[i])) + e.append(ExprAssign(ExprMem(r, 32), regs[i])) r = SP + ExprInt(-4 * len(regs), 32) - e.append(ExprAff(SP, r)) + e.append(ExprAssign(SP, r)) return e, [] @@ -1067,13 +1067,13 @@ def pop(ir, instr, a): dst = None for i in xrange(len(regs)): r = SP + ExprInt(4 * i, 32) - e.append(ExprAff(regs[i], ExprMem(r, 32))) + e.append(ExprAssign(regs[i], ExprMem(r, 32))) if regs[i] == ir.pc: dst = ExprMem(r, 32) r = SP + ExprInt(4 * len(regs), 32) - e.append(ExprAff(SP, r)) + e.append(ExprAssign(SP, r)) if dst is not None: - e.append(ExprAff(ir.IRDst, dst)) + e.append(ExprAssign(ir.IRDst, dst)) return e, [] @@ -1081,7 +1081,7 @@ def cbz(ir, instr, a, b): e = [] loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 32) - e.append(ExprAff(ir.IRDst, ExprCond(a, loc_next_expr, b))) + e.append(ExprAssign(ir.IRDst, ExprCond(a, loc_next_expr, b))) return e, [] @@ -1096,41 +1096,41 @@ def cbnz(ir, instr, a, b): def uxtb(ir, instr, a, b): e = [] r = b[:8].zeroExtend(32) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = None if PC in a.get_r(): dst = PC - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def uxth(ir, instr, a, b): e = [] r = b[:16].zeroExtend(32) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = None if PC in a.get_r(): dst = PC - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def sxtb(ir, instr, a, b): e = [] r = b[:8].signExtend(32) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = None if PC in a.get_r(): dst = PC - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def sxth(ir, instr, a, b): e = [] r = b[:16].signExtend(32) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = None if PC in a.get_r(): dst = PC - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -1139,11 +1139,11 @@ def ubfx(ir, instr, a, b, c, d): c = int(c) d = int(d) r = b[c:c+d].zeroExtend(32) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = None if PC in a.get_r(): dst = PC - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] def bfc(ir, instr, a, b, c): @@ -1161,11 +1161,11 @@ def bfc(ir, instr, a, b, c): if last < 32: out.append(a[last:]) r = ExprCompose(*out) - e.append(ExprAff(a, r)) + e.append(ExprAssign(a, r)) dst = None if PC in a.get_r(): dst = PC - e.append(ExprAff(ir.IRDst, r)) + e.append(ExprAssign(ir.IRDst, r)) return e, [] @@ -1181,19 +1181,19 @@ def pldw(ir, instr, a): def clz(ir, instr, a, b): e = [] - e.append(ExprAff(a, ExprOp('cntleadzeros', b))) + e.append(ExprAssign(a, ExprOp('cntleadzeros', b))) return e, [] def uxtab(ir, instr, a, b, c): e = [] - e.append(ExprAff(a, b + (c & ExprInt(0xff, 32)))) + e.append(ExprAssign(a, b + (c & ExprInt(0xff, 32)))) return e, [] def bkpt(ir, instr, a): e = [] - e.append(ExprAff(exception_flags, ExprInt(EXCEPT_SOFT_BP, 32))) - e.append(ExprAff(bp_num, a)) + e.append(ExprAssign(exception_flags, ExprInt(EXCEPT_SOFT_BP, 32))) + e.append(ExprAssign(bp_num, a)) return e, [] @@ -1206,58 +1206,58 @@ def _extract_s16(arg, part): def smul(ir, instr, a, b, c): e = [] - e.append(ExprAff(a, _extract_s16(b, instr.name[4]).signExtend(32) * _extract_s16(c, instr.name[5]).signExtend(32))) + e.append(ExprAssign(a, _extract_s16(b, instr.name[4]).signExtend(32) * _extract_s16(c, instr.name[5]).signExtend(32))) return e, [] def smulw(ir, instr, a, b, c): e = [] prod = b.signExtend(48) * _extract_s16(c, instr.name[5]).signExtend(48) - e.append(ExprAff(a, prod[16:48])) + e.append(ExprAssign(a, prod[16:48])) return e, [] # signed most significant 32 bits of the 48-bit result def tbb(ir, instr, a): e = [] dst = PC + ExprInt(2, 32) * a.zeroExtend(32) - e.append(ExprAff(PC, dst)) - e.append(ExprAff(ir.IRDst, dst)) + e.append(ExprAssign(PC, dst)) + e.append(ExprAssign(ir.IRDst, dst)) return e, [] def tbh(ir, instr, a): e = [] dst = PC + ExprInt(2, 32) * a.zeroExtend(32) - e.append(ExprAff(PC, dst)) - e.append(ExprAff(ir.IRDst, dst)) + e.append(ExprAssign(PC, dst)) + e.append(ExprAssign(ir.IRDst, dst)) return e, [] def smlabb(ir, instr, a, b, c, d): e = [] result = (b[:16].signExtend(32) * c[:16].signExtend(32)) + d - e.append(ExprAff(a, result)) + e.append(ExprAssign(a, result)) return e, [] def smlabt(ir, instr, a, b, c, d): e = [] result = (b[:16].signExtend(32) * c[16:32].signExtend(32)) + d - e.append(ExprAff(a, result)) + e.append(ExprAssign(a, result)) return e, [] def smlatb(ir, instr, a, b, c, d): e = [] result = (b[16:32].signExtend(32) * c[:16].signExtend(32)) + d - e.append(ExprAff(a, result)) + e.append(ExprAssign(a, result)) return e, [] def smlatt(ir, instr, a, b, c, d): e = [] result = (b[16:32].signExtend(32) * c[16:32].signExtend(32)) + d - e.append(ExprAff(a, result)) + e.append(ExprAssign(a, result)) return e, [] @@ -1269,10 +1269,10 @@ def uadd8(ir, instr, a, b, c): sums.append(b[i:i+8] + c[i:i+8]) ges.append((b[i:i+8].zeroExtend(9) + c[i:i+8].zeroExtend(9))[8:9]) - e.append(ExprAff(a, ExprCompose(*sums))) + e.append(ExprAssign(a, ExprCompose(*sums))) for i, value in enumerate(ges): - e.append(ExprAff(ge_regs[i], value)) + e.append(ExprAssign(ge_regs[i], value)) return e, [] @@ -1283,14 +1283,14 @@ def sel(ir, instr, a, b, c): for i in xrange(4): parts.append(ExprCond(ge_regs[i], b[i*8:(i+1)*8], c[i*8:(i+1)*8])) result = ExprCompose(*parts) - e.append(ExprAff(a, result)) + e.append(ExprAssign(a, result)) return e, [] def rev(ir, instr, a, b): e = [] result = ExprCompose(b[24:32], b[16:24], b[8:16], b[:8]) - e.append(ExprAff(a, result)) + e.append(ExprAssign(a, result)) return e, [] @@ -1438,9 +1438,9 @@ def add_condition_expr(ir, instr, cond, instr_ir, extra_ir): has_irdst = True break if not has_irdst: - instr_ir.append(ExprAff(ir.IRDst, loc_next_expr)) + instr_ir.append(ExprAssign(ir.IRDst, loc_next_expr)) e_do = IRBlock(loc_do, [AssignBlock(instr_ir, instr)]) - e = [ExprAff(ir.IRDst, dst_cond)] + e = [ExprAssign(ir.IRDst, dst_cond)] return e, [e_do] + extra_ir mnemo_func = {} @@ -1656,7 +1656,7 @@ class ir_arml(IntermediateRepresentation): if dst != self.pc: dst = dst.replace_expr(pc_fixed) src = src.replace_expr(pc_fixed) - instr_ir[i] = ExprAff(dst, src) + instr_ir[i] = ExprAssign(dst, src) for idx, irblock in enumerate(extra_ir): extra_ir[idx] = irblock.modify_exprs(lambda expr: expr.replace_expr(pc_fixed) \ @@ -1706,7 +1706,7 @@ class ir_arml(IntermediateRepresentation): # Gen dummy irblock for IT instr loc_next = self.get_next_loc_key(instr) - dst = ExprAff(self.IRDst, ExprId(loc_next, 32)) + dst = ExprAssign(self.IRDst, ExprId(loc_next, 32)) dst_blk = AssignBlock([dst], instr) assignments.append(dst_blk) irblock = IRBlock(loc, assignments) @@ -1727,7 +1727,7 @@ class ir_arml(IntermediateRepresentation): local_cond = ~cond_eq else: local_cond = cond_eq - dst = ExprAff(self.IRDst, ExprCond(local_cond, ExprLoc(loc_do, 32), ExprLoc(loc_next, 32))) + dst = ExprAssign(self.IRDst, ExprCond(local_cond, ExprLoc(loc_do, 32), ExprLoc(loc_next, 32))) dst_blk = AssignBlock([dst], instr) assignments.append(dst_blk) irblock = IRBlock(loc, assignments) @@ -1743,7 +1743,7 @@ class ir_arml(IntermediateRepresentation): if split: raise NotImplementedError("Unsupported instr in IT block (%s)" % instr) - dst = ExprAff(self.IRDst, ExprId(loc_next, 32)) + dst = ExprAssign(self.IRDst, ExprId(loc_next, 32)) dst_blk = AssignBlock([dst], instr) assignments.append(dst_blk) irblock = IRBlock(loc, assignments) @@ -1824,7 +1824,7 @@ class ir_armtl(ir_arml): if dst != self.pc: dst = dst.replace_expr(pc_fixed) src = src.replace_expr(pc_fixed) - instr_ir[i] = ExprAff(dst, src) + instr_ir[i] = ExprAssign(dst, src) for idx, irblock in enumerate(extra_ir): extra_ir[idx] = irblock.modify_exprs(lambda expr: expr.replace_expr(pc_fixed) \ diff --git a/miasm2/arch/mep/sem.py b/miasm2/arch/mep/sem.py index e779b970..717afd7e 100644 --- a/miasm2/arch/mep/sem.py +++ b/miasm2/arch/mep/sem.py @@ -8,7 +8,7 @@ from miasm2.arch.mep.regs import PC, SP, LP, SAR, TP, RPB, RPE, RPC, EPC, NPC, \ take_jmp, in_erepeat from miasm2.arch.mep.regs import EXC, HI, LO, PSW, DEPC, DBG from miasm2.expression.expression import ExprId, ExprInt, ExprOp -from miasm2.expression.expression import ExprAff, ExprCond, ExprMem +from miasm2.expression.expression import ExprAssign, ExprCond, ExprMem from miasm2.core.cpu import sign_ext from miasm2.jitter.csts import EXCEPT_DIV_BY_ZERO @@ -105,7 +105,7 @@ def sw(reg_src, deref_dst): # imm = deref_reg_or_imm.zeroExtend(32) # dst = ExprMem(ExprOp("+", imm, deref_reg.arg)) # -# return [ExprAff(dst, reg_src)], [] +# return [ExprAssign(dst, reg_src)], [] @sbuild.parse @@ -242,7 +242,7 @@ def add3(ir, instr, reg_dst, reg_src, reg_or_imm): value = int(reg_or_imm.arg) result = ExprOp("+", reg_src, ExprInt(value, 32)) - return [ExprAff(reg_dst, result)], [] + return [ExprAssign(reg_dst, result)], [] manual_functions["add3"] = add3 @@ -287,7 +287,7 @@ def sbvck3(ir, instr, r0, rn, rm): # Return the result condition = ExprCond(overflow_test, ExprInt(1, 32), ExprInt(0, 32)) - return [ExprAff(r0, condition)], [] + return [ExprAssign(r0, condition)], [] manual_functions["sbvck3"] = sbvck3 @@ -602,12 +602,12 @@ def jmp(ir, instr, reg_or_imm): if isinstance(reg_or_imm, ExprId): # PC <- Rm31..1||0 - new_PC = ExprAff(PC, reg_or_imm) + new_PC = ExprAssign(PC, reg_or_imm) else: # PC <- PC31..28||0000||(target24)23..1||0 - new_PC = ExprAff(PC, ExprOp("+", ExprOp("&", PC, ExprInt(0xF0000000, 32)), reg_or_imm)) + new_PC = ExprAssign(PC, ExprOp("+", ExprOp("&", PC, ExprInt(0xF0000000, 32)), reg_or_imm)) - return [new_PC, ExprAff(ir.IRDst, new_PC)], [] + return [new_PC, ExprAssign(ir.IRDst, new_PC)], [] manual_functions["jmp"] = jmp diff --git a/miasm2/arch/mips32/ira.py b/miasm2/arch/mips32/ira.py index 4c4a33d8..90558708 100644 --- a/miasm2/arch/mips32/ira.py +++ b/miasm2/arch/mips32/ira.py @@ -1,6 +1,6 @@ #-*- coding:utf-8 -*- -from miasm2.expression.expression import ExprAff, ExprOp +from miasm2.expression.expression import ExprAssign, ExprOp from miasm2.ir.ir import IRBlock, AssignBlock from miasm2.ir.analysis import ira from miasm2.arch.mips32.sem import ir_mips32l, ir_mips32b @@ -13,7 +13,7 @@ class ir_a_mips32l(ir_mips32l, ira): def call_effects(self, ad, instr): call_assignblk = AssignBlock( [ - ExprAff( + ExprAssign( self.ret_reg, ExprOp( 'call_func_ret', diff --git a/miasm2/arch/mips32/sem.py b/miasm2/arch/mips32/sem.py index 92001280..a603e7c3 100644 --- a/miasm2/arch/mips32/sem.py +++ b/miasm2/arch/mips32/sem.py @@ -333,7 +333,7 @@ def ins(ir, instr, a, b, c, d): if pos + l != 32: my_slices.append((a[pos+l:], pos+l, 32)) r = m2_expr.ExprCompose(my_slices) - e.append(m2_expr.ExprAff(a, r)) + e.append(m2_expr.ExprAssign(a, r)) return e, [] @@ -433,16 +433,16 @@ def teq(ir, instr, arg1, arg2): loc_next_expr = m2_expr.ExprLoc(loc_next, ir.IRDst.size) do_except = [] - do_except.append(m2_expr.ExprAff(exception_flags, m2_expr.ExprInt( + do_except.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt( EXCEPT_DIV_BY_ZERO, exception_flags.size))) - do_except.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + do_except.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) blk_except = IRBlock(loc_except.index, [AssignBlock(do_except, instr)]) cond = arg1 - arg2 e = [] - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(cond, loc_next_expr, loc_except_expr))) return e, [blk_except] @@ -498,7 +498,7 @@ class ir_mips32l(IntermediateRepresentation): ZERO: m2_expr.ExprInt(0, 32) } - instr_ir = [m2_expr.ExprAff(expr.dst, expr.src.replace_expr(fixed_regs)) + 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)) diff --git a/miasm2/arch/msp430/sem.py b/miasm2/arch/msp430/sem.py index 191abe75..4736a51c 100644 --- a/miasm2/arch/msp430/sem.py +++ b/miasm2/arch/msp430/sem.py @@ -24,23 +24,23 @@ def bcd2hex(val): def reset_sr_res(): - return [ExprAff(res, ExprInt(0, 7))] + return [ExprAssign(res, ExprInt(0, 7))] def update_flag_zf(a): - return [ExprAff(zf, ExprCond(a, ExprInt(0, zf.size), ExprInt(1, zf.size)))] + return [ExprAssign(zf, ExprCond(a, ExprInt(0, zf.size), ExprInt(1, zf.size)))] def update_flag_nf(a): - return [ExprAff(nf, a.msb())] + return [ExprAssign(nf, a.msb())] def update_flag_pf(a): - return [ExprAff(pf, ExprOp('parity', a & ExprInt(0xFF, a.size)))] + return [ExprAssign(pf, ExprOp('parity', a & ExprInt(0xFF, a.size)))] def update_flag_cf_inv_zf(a): - return [ExprAff(cf, ExprCond(a, ExprInt(1, cf.size), ExprInt(0, cf.size)))] + return [ExprAssign(cf, ExprCond(a, ExprInt(1, cf.size), ExprInt(0, cf.size)))] def update_flag_zn_r(a): @@ -52,20 +52,20 @@ def update_flag_zn_r(a): def update_flag_sub_cf(a, b, c): - return [ExprAff(cf, + return [ExprAssign(cf, ((((a ^ b) ^ c) ^ ((a ^ c) & (a ^ b))).msb()) ^ ExprInt(1, 1))] def update_flag_add_cf(a, b, c): - return [ExprAff(cf, (((a ^ b) ^ c) ^ ((a ^ c) & (~(a ^ b)))).msb())] + return [ExprAssign(cf, (((a ^ b) ^ c) ^ ((a ^ c) & (~(a ^ b)))).msb())] def update_flag_add_of(a, b, c): - return [ExprAff(of, (((a ^ c) & (~(a ^ b)))).msb())] + return [ExprAssign(of, (((a ^ c) & (~(a ^ b)))).msb())] def update_flag_sub_of(a, b, c): - return [ExprAff(of, (((a ^ c) & (a ^ b))).msb())] + return [ExprAssign(of, (((a ^ c) & (a ^ b))).msb())] def mng_autoinc(a, b, size): @@ -74,7 +74,7 @@ def mng_autoinc(a, b, size): return e, a, b a_r = a.args[0] - e.append(ExprAff(a_r, a_r + ExprInt(size / 8, a_r.size))) + e.append(ExprAssign(a_r, a_r + ExprInt(size / 8, a_r.size))) a = ExprMem(a_r, size) if isinstance(b, ExprMem) and a_r in b.arg: b = ExprMem(b.arg + ExprInt(size / 8, 16), b.size) @@ -90,35 +90,35 @@ def mov_b(ir, instr, a, b): a = a[:8] else: a = a[:8].zeroExtend(16) - e.append(ExprAff(b, a)) + e.append(ExprAssign(b, a)) return e, [] def mov_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) - e.append(ExprAff(b, a)) + e.append(ExprAssign(b, a)) if b == ir.pc: - e.append(ExprAff(ir.IRDst, a)) + e.append(ExprAssign(ir.IRDst, a)) return e, [] def and_b(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 8) c = a[:8] & b[:8] - e.append(ExprAff(b, c.zeroExtend(16))) + e.append(ExprAssign(b, c.zeroExtend(16))) e += update_flag_zn_r(c) e += update_flag_cf_inv_zf(c) - e += [ExprAff(of, ExprInt(0, 1))] + e += [ExprAssign(of, ExprInt(0, 1))] return e, [] def and_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) c = a & b - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) e += update_flag_zn_r(c) e += update_flag_cf_inv_zf(c) - e += [ExprAff(of, ExprInt(0, 1))] + e += [ExprAssign(of, ExprInt(0, 1))] return e, [] @@ -126,21 +126,21 @@ def bic_b(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 8) c = (a[:8] ^ ExprInt(0xff, 8)) & b[:8] c = c.zeroExtend(b.size) - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) return e, [] def bic_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) c = (a ^ ExprInt(0xffff, 16)) & b - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) return e, [] def bis_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) c = a | b - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) return e, [] @@ -149,14 +149,14 @@ def bit_w(ir, instr, a, b): c = a & b e += update_flag_zn_r(c) e += update_flag_cf_inv_zf(c) - e.append(ExprAff(of, ExprInt(0, 1))) + e.append(ExprAssign(of, ExprInt(0, 1))) return e, [] """ def sub_b(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 8) c = b - a - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) e += update_flag_zn_r(c) e += update_flag_sub_cf(b, a, c) return None, e, [] @@ -166,7 +166,7 @@ def sub_b(ir, instr, a, b): def sub_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) c = b - a - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) e += update_flag_zn_r(c) e += update_flag_sub_cf(b, a, c) # micrcorruption @@ -183,7 +183,7 @@ def add_b(ir, instr, a, b): b = b[:8] a = a[:8] c = b + a - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) e += update_flag_zn_r(c) e += update_flag_add_cf(a, b, c) e += update_flag_add_of(a, b, c) @@ -193,7 +193,7 @@ def add_b(ir, instr, a, b): def add_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) c = b + a - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) e += update_flag_zn_r(c) e += update_flag_add_cf(a, b, c) e += update_flag_add_of(a, b, c) @@ -205,7 +205,7 @@ def dadd_w(ir, instr, a, b): # TODO: microcorruption no carryflag c = ExprOp("bcdadd", b, a) # +zeroExtend(cf, 16)) - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) # e += update_flag_zn_r(c) # micrcorruption @@ -213,7 +213,7 @@ def dadd_w(ir, instr, a, b): # e += update_flag_nf(a) e += reset_sr_res() - e.append(ExprAff(cf, ExprOp("bcdadd_cf", b, a))) # +zeroExtend(cf, 16)))) + e.append(ExprAssign(cf, ExprOp("bcdadd_cf", b, a))) # +zeroExtend(cf, 16)))) # of : undefined return e, [] @@ -222,17 +222,17 @@ def dadd_w(ir, instr, a, b): def xor_w(ir, instr, a, b): e, a, b = mng_autoinc(a, b, 16) c = b ^ a - e.append(ExprAff(b, c)) + e.append(ExprAssign(b, c)) e += update_flag_zn_r(c) e += update_flag_cf_inv_zf(c) - e.append(ExprAff(of, b.msb() & a.msb())) + e.append(ExprAssign(of, b.msb() & a.msb())) return e, [] def push_w(ir, instr, a): e = [] - e.append(ExprAff(ExprMem(SP - ExprInt(2, 16), 16), a)) - e.append(ExprAff(SP, SP - ExprInt(2, 16))) + e.append(ExprAssign(ExprMem(SP - ExprInt(2, 16), 16), a)) + e.append(ExprAssign(SP, SP - ExprInt(2, 16))) return e, [] @@ -242,17 +242,17 @@ def call(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) - e.append(ExprAff(ExprMem(SP - ExprInt(2, 16), 16), loc_next_expr)) - e.append(ExprAff(SP, SP - ExprInt(2, 16))) - e.append(ExprAff(PC, a)) - e.append(ExprAff(ir.IRDst, a)) + e.append(ExprAssign(ExprMem(SP - ExprInt(2, 16), 16), loc_next_expr)) + e.append(ExprAssign(SP, SP - ExprInt(2, 16))) + e.append(ExprAssign(PC, a)) + e.append(ExprAssign(ir.IRDst, a)) return e, [] def swpb(ir, instr, a): e = [] x, y = a[:8], a[8:16] - e.append(ExprAff(a, ExprCompose(y, x))) + e.append(ExprAssign(a, ExprCompose(y, x))) return e, [] @@ -278,8 +278,8 @@ def jz(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) e = [] - e.append(ExprAff(PC, ExprCond(zf, a, loc_next_expr))) - e.append(ExprAff(ir.IRDst, ExprCond(zf, a, loc_next_expr))) + e.append(ExprAssign(PC, ExprCond(zf, a, loc_next_expr))) + e.append(ExprAssign(ir.IRDst, ExprCond(zf, a, loc_next_expr))) return e, [] @@ -287,8 +287,8 @@ def jnz(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) e = [] - e.append(ExprAff(PC, ExprCond(zf, loc_next_expr, a))) - e.append(ExprAff(ir.IRDst, ExprCond(zf, loc_next_expr, a))) + e.append(ExprAssign(PC, ExprCond(zf, loc_next_expr, a))) + e.append(ExprAssign(ir.IRDst, ExprCond(zf, loc_next_expr, a))) return e, [] @@ -296,8 +296,8 @@ def jl(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) e = [] - e.append(ExprAff(PC, ExprCond(nf ^ of, a, loc_next_expr))) - e.append(ExprAff(ir.IRDst, ExprCond(nf ^ of, a, loc_next_expr))) + e.append(ExprAssign(PC, ExprCond(nf ^ of, a, loc_next_expr))) + e.append(ExprAssign(ir.IRDst, ExprCond(nf ^ of, a, loc_next_expr))) return e, [] @@ -305,8 +305,8 @@ def jc(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) e = [] - e.append(ExprAff(PC, ExprCond(cf, a, loc_next_expr))) - e.append(ExprAff(ir.IRDst, ExprCond(cf, a, loc_next_expr))) + e.append(ExprAssign(PC, ExprCond(cf, a, loc_next_expr))) + e.append(ExprAssign(ir.IRDst, ExprCond(cf, a, loc_next_expr))) return e, [] @@ -314,8 +314,8 @@ def jnc(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) e = [] - e.append(ExprAff(PC, ExprCond(cf, loc_next_expr, a))) - e.append(ExprAff(ir.IRDst, ExprCond(cf, loc_next_expr, a))) + e.append(ExprAssign(PC, ExprCond(cf, loc_next_expr, a))) + e.append(ExprAssign(ir.IRDst, ExprCond(cf, loc_next_expr, a))) return e, [] @@ -323,23 +323,23 @@ def jge(ir, instr, a): loc_next = ir.get_next_loc_key(instr) loc_next_expr = ExprLoc(loc_next, 16) e = [] - e.append(ExprAff(PC, ExprCond(nf ^ of, loc_next_expr, a))) - e.append(ExprAff(ir.IRDst, ExprCond(nf ^ of, loc_next_expr, a))) + e.append(ExprAssign(PC, ExprCond(nf ^ of, loc_next_expr, a))) + e.append(ExprAssign(ir.IRDst, ExprCond(nf ^ of, loc_next_expr, a))) return e, [] def jmp(ir, instr, a): e = [] - e.append(ExprAff(PC, a)) - e.append(ExprAff(ir.IRDst, a)) + e.append(ExprAssign(PC, a)) + e.append(ExprAssign(ir.IRDst, a)) return e, [] def rrc_w(ir, instr, a): e = [] c = ExprCompose(a[1:16], cf) - e.append(ExprAff(a, c)) - e.append(ExprAff(cf, a[:1])) + e.append(ExprAssign(a, c)) + e.append(ExprAssign(cf, a[:1])) # e += update_flag_zn_r(c) # micrcorruption @@ -347,16 +347,16 @@ def rrc_w(ir, instr, a): # e += update_flag_nf(a) e += reset_sr_res() - e.append(ExprAff(of, ExprInt(0, 1))) + e.append(ExprAssign(of, ExprInt(0, 1))) return e, [] def rra_w(ir, instr, a): e = [] c = ExprCompose(a[1:16], a[15:16]) - e.append(ExprAff(a, c)) + e.append(ExprAssign(a, c)) # TODO: error in disasm microcorruption? - # e.append(ExprAff(cf, a[:1])) + # e.append(ExprAssign(cf, a[:1])) # e += update_flag_zn_r(c) # micrcorruption @@ -364,18 +364,18 @@ def rra_w(ir, instr, a): # e += update_flag_nf(a) e += reset_sr_res() - e.append(ExprAff(of, ExprInt(0, 1))) + e.append(ExprAssign(of, ExprInt(0, 1))) return e, [] def sxt(ir, instr, a): e = [] c = a[:8].signExtend(16) - e.append(ExprAff(a, c)) + e.append(ExprAssign(a, c)) e += update_flag_zn_r(c) e += update_flag_cf_inv_zf(c) - e.append(ExprAff(of, ExprInt(0, 1))) + e.append(ExprAssign(of, ExprInt(0, 1))) return e, [] @@ -414,10 +414,10 @@ mnemo_func = { composed_sr = ExprCompose(cf, zf, nf, gie, cpuoff, osc, scg0, scg1, of, res) -def ComposeExprAff(dst, src): +def ComposeExprAssign(dst, src): e = [] for start, arg in dst.iter_args(): - e.append(ExprAff(arg, src[start:start+arg.size])) + e.append(ExprAssign(arg, src[start:start+arg.size])) return e @@ -442,14 +442,14 @@ class ir_msp430(IntermediateRepresentation): def mod_sr(self, instr, instr_ir, extra_ir): for i, x in enumerate(instr_ir): - x = ExprAff(x.dst, x.src.replace_expr({SR: composed_sr})) + x = ExprAssign(x.dst, x.src.replace_expr({SR: composed_sr})) instr_ir[i] = x if x.dst != SR: continue - xx = ComposeExprAff(composed_sr, x.src) + xx = ComposeExprAssign(composed_sr, x.src) instr_ir[i:i+1] = xx for i, x in enumerate(instr_ir): - x = ExprAff(x.dst, x.src.replace_expr( + x = ExprAssign(x.dst, x.src.replace_expr( {self.pc: ExprInt(instr.offset + instr.l, 16)})) instr_ir[i] = x diff --git a/miasm2/arch/ppc/ira.py b/miasm2/arch/ppc/ira.py index 79476e90..cde57dd3 100644 --- a/miasm2/arch/ppc/ira.py +++ b/miasm2/arch/ppc/ira.py @@ -1,4 +1,4 @@ -from miasm2.expression.expression import ExprAff, ExprOp +from miasm2.expression.expression import ExprAssign, ExprOp from miasm2.ir.ir import AssignBlock from miasm2.ir.analysis import ira from miasm2.arch.ppc.sem import ir_ppc32b @@ -25,7 +25,7 @@ class ir_a_ppc32b(ir_ppc32b, ira): def call_effects(self, ad, instr): call_assignblks = AssignBlock( [ - ExprAff( + ExprAssign( self.ret_reg, ExprOp( 'call_func_ret', @@ -36,7 +36,7 @@ class ir_a_ppc32b(ir_ppc32b, ira): self.arch.regs.R5, ) ), - ExprAff(self.sp, ExprOp('call_func_stack', ad, self.sp)), + ExprAssign(self.sp, ExprOp('call_func_stack', ad, self.sp)), ], instr ) diff --git a/miasm2/arch/ppc/sem.py b/miasm2/arch/ppc/sem.py index 82a662c2..3a8ec244 100644 --- a/miasm2/arch/ppc/sem.py +++ b/miasm2/arch/ppc/sem.py @@ -23,15 +23,15 @@ sbuild = SemBuilder(ctx) def mn_compute_flags(rvalue, overflow_expr=None): ret = [] - ret.append(ExprAff(CR0_LT, rvalue.msb())) - ret.append(ExprAff(CR0_GT, (ExprCond(rvalue, ExprInt(1, 1), + ret.append(ExprAssign(CR0_LT, rvalue.msb())) + ret.append(ExprAssign(CR0_GT, (ExprCond(rvalue, ExprInt(1, 1), ExprInt(0, 1)) & ~rvalue.msb()))) - ret.append(ExprAff(CR0_EQ, ExprCond(rvalue, ExprInt(0, 1), + ret.append(ExprAssign(CR0_EQ, ExprCond(rvalue, ExprInt(0, 1), ExprInt(1, 1)))) if overflow_expr != None: - ret.append(ExprAff(CR0_SO, XER_SO | overflow_expr)) + ret.append(ExprAssign(CR0_SO, XER_SO | overflow_expr)) else: - ret.append(ExprAff(CR0_SO, XER_SO)) + ret.append(ExprAssign(CR0_SO, XER_SO)) return ret @@ -70,8 +70,8 @@ def mn_do_add(ir, instr, arg1, arg2, arg3): msb2 = arg3.msb() msba = rvalue.msb() over_expr = ~(msb1 ^ msb2) & (msb1 ^ msba) - flags_update.append(ExprAff(XER_OV, over_expr)) - flags_update.append(ExprAff(XER_SO, XER_SO | over_expr)) + flags_update.append(ExprAssign(XER_OV, over_expr)) + flags_update.append(ExprAssign(XER_SO, XER_SO | over_expr)) if has_dot: flags_update += mn_compute_flags(rvalue, over_expr) @@ -79,9 +79,9 @@ def mn_do_add(ir, instr, arg1, arg2, arg3): if has_c or has_e: carry_expr = (((arg2 ^ arg3) ^ rvalue) ^ ((arg2 ^ rvalue) & (~(arg2 ^ arg3)))).msb() - flags_update.append(ExprAff(XER_CA, carry_expr)) + flags_update.append(ExprAssign(XER_CA, carry_expr)) - return ([ ExprAff(arg1, rvalue) ] + flags_update), [] + return ([ ExprAssign(arg1, rvalue) ] + flags_update), [] def mn_do_and(ir, instr, ra, rs, arg2): if len(instr.name) > 3 and instr.name[3] == 'C': @@ -90,7 +90,7 @@ def mn_do_and(ir, instr, ra, rs, arg2): oarg = arg2 rvalue = rs & oarg - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -98,7 +98,7 @@ def mn_do_and(ir, instr, ra, rs, arg2): return ret, [] def mn_do_cntlzw(ir, instr, ra, rs): - ret = [ ExprAff(ra, ExprOp('cntleadzeros', rs)) ] + ret = [ ExprAssign(ra, ExprOp('cntleadzeros', rs)) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -136,7 +136,7 @@ def mn_do_cr(ir, instr, crd, cra, crb): r = a ^ b else: raise RuntimeError("Unknown operation on CR") - return [ ExprAff(d, r) ], [] + return [ ExprAssign(d, r) ], [] def mn_do_div(ir, instr, rd, ra, rb): assert instr.name[0:4] == 'DIVW' @@ -177,18 +177,18 @@ def mn_do_div(ir, instr, rd, ra, rb): ExprInt(1, 1)) & ExprCond(rb ^ 0xFFFFFFFF, ExprInt(0, 1), ExprInt(1, 1))) - flags_update.append(ExprAff(XER_OV, over_expr)) - flags_update.append(ExprAff(XER_SO, XER_SO | over_expr)) + flags_update.append(ExprAssign(XER_OV, over_expr)) + flags_update.append(ExprAssign(XER_SO, XER_SO | over_expr)) if has_dot: flags_update += mn_compute_flags(rvalue, over_expr) - return ([ ExprAff(rd, rvalue) ] + flags_update), [] + return ([ ExprAssign(rd, rvalue) ] + flags_update), [] def mn_do_eqv(ir, instr, ra, rs, rb): rvalue = ~(rs ^ rb) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -204,7 +204,7 @@ def mn_do_exts(ir, instr, ra, rs): assert False rvalue = rs[0:size].signExtend(32) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -264,16 +264,16 @@ def mn_do_load(ir, instr, arg1, arg2, arg3=None): else: src = src.zeroExtend(32) - ret.append(ExprAff(arg1, src)) + ret.append(ExprAssign(arg1, src)) if has_u: if arg3 is None: - ret.append(ExprAff(arg2.arg.args[0], address)) + ret.append(ExprAssign(arg2.arg.args[0], address)) else: - ret.append(ExprAff(arg2, address)) + ret.append(ExprAssign(arg2, address)) if is_lwarx: - ret.append(ExprAff(reserve, ExprInt(1, 1))) - ret.append(ExprAff(reserve_address, address)) # XXX should be the PA + ret.append(ExprAssign(reserve, ExprInt(1, 1))) + ret.append(ExprAssign(reserve_address, address)) # XXX should be the PA return ret, [] @@ -283,7 +283,7 @@ def mn_do_lmw(ir, instr, rd, src): ri = int(rd.name[1:],10) i = 0 while ri <= 31: - ret.append(ExprAff(all_regs_ids_byname["R%d" % ri], + ret.append(ExprAssign(all_regs_ids_byname["R%d" % ri], ExprMem(address + ExprInt(i, 32), 32))) ri += 1 i += 4 @@ -305,7 +305,7 @@ def mn_do_mcrf(ir, instr, crfd, crfs): for bit in [ 'LT', 'GT', 'EQ', 'SO' ]: d = all_regs_ids_byname["%s_%s" % (crfd, bit)] s = all_regs_ids_byname["%s_%s" % (crfs, bit)] - ret.append(ExprAff(d, s)) + ret.append(ExprAssign(d, s)) return ret, [] @@ -314,12 +314,12 @@ def mn_do_mcrxr(ir, instr, crfd): for (bit, val) in [ ('LT', XER_SO), ('GT', XER_OV), ('EQ', XER_CA), ('SO', ExprInt(0, 1)) ]: - ret.append(ExprAff(all_regs_ids_byname["%s_%s" % (crfd, bit)], val)) + ret.append(ExprAssign(all_regs_ids_byname["%s_%s" % (crfd, bit)], val)) return ret, [] def mn_do_mfcr(ir, instr, rd): - return ([ ExprAff(rd, ExprCompose(*[ all_regs_ids_byname["CR%d_%s" % (i, b)] + return ([ ExprAssign(rd, ExprCompose(*[ all_regs_ids_byname["CR%d_%s" % (i, b)] for i in xrange(7, -1, -1) for b in ['SO', 'EQ', 'GT', 'LT']]))], []) @@ -332,15 +332,15 @@ def mn_mfspr(ir, instr, arg1, arg2): sprid = arg2.arg.arg gprid = int(arg1.name[1:]) if sprid in spr_dict: - return [ ExprAff(arg1, spr_dict[sprid]) ], [] + return [ ExprAssign(arg1, spr_dict[sprid]) ], [] elif sprid == 1: # XER - return [ ExprAff(arg1, ExprCompose(XER_BC, ExprInt(0, 22), + return [ ExprAssign(arg1, ExprCompose(XER_BC, ExprInt(0, 22), XER_CA, XER_OV, XER_SO)) ], [] else: - return [ ExprAff(spr_access, + return [ ExprAssign(spr_access, ExprInt(((sprid << SPR_ACCESS_SPR_OFF) | (gprid << SPR_ACCESS_GPR_OFF)), 32)), - ExprAff(exception_flags, ExprInt(EXCEPT_SPR_ACCESS, 32)) ], [] + ExprAssign(exception_flags, ExprInt(EXCEPT_SPR_ACCESS, 32)) ], [] def mn_mtcrf(ir, instr, crm, rs): ret = [] @@ -349,7 +349,7 @@ def mn_mtcrf(ir, instr, crm, rs): if crm.arg.arg & (1 << (7 - i)): j = (28 - 4 * i) + 3 for b in ['LT', 'GT', 'EQ', 'SO']: - ret.append(ExprAff(all_regs_ids_byname["CR%d_%s" % (i, b)], + ret.append(ExprAssign(all_regs_ids_byname["CR%d_%s" % (i, b)], rs[j:j+1])) j -= 1 @@ -357,24 +357,24 @@ def mn_mtcrf(ir, instr, crm, rs): def mn_mtmsr(ir, instr, rs): print "%08x: MSR assigned" % instr.offset - return [ ExprAff(MSR, rs) ], [] + return [ ExprAssign(MSR, rs) ], [] def mn_mtspr(ir, instr, arg1, arg2): sprid = arg1.arg.arg gprid = int(arg2.name[1:]) if sprid in spr_dict: - return [ ExprAff(spr_dict[sprid], arg2) ], [] + return [ ExprAssign(spr_dict[sprid], arg2) ], [] elif sprid == 1: # XER - return [ ExprAff(XER_SO, arg2[31:32]), - ExprAff(XER_OV, arg2[30:31]), - ExprAff(XER_CA, arg2[29:30]), - ExprAff(XER_BC, arg2[0:7]) ], [] + return [ ExprAssign(XER_SO, arg2[31:32]), + ExprAssign(XER_OV, arg2[30:31]), + ExprAssign(XER_CA, arg2[29:30]), + ExprAssign(XER_BC, arg2[0:7]) ], [] else: - return [ ExprAff(spr_access, + return [ ExprAssign(spr_access, ExprInt(((sprid << SPR_ACCESS_SPR_OFF) | (gprid << SPR_ACCESS_GPR_OFF) | SPR_ACCESS_IS_WRITE), 32)), - ExprAff(exception_flags, ExprInt(EXCEPT_SPR_ACCESS, 32)) ], [] + ExprAssign(exception_flags, ExprInt(EXCEPT_SPR_ACCESS, 32)) ], [] def mn_do_mul(ir, instr, rd, ra, arg2): variant = instr.name[3:] @@ -398,7 +398,7 @@ def mn_do_mul(ir, instr, rd, ra, arg2): if shift != 0: rvalue = rvalue[shift : shift + 32] - ret = [ ExprAff(rd, rvalue) ] + ret = [ ExprAssign(rd, rvalue) ] over_expr = None if variant[-1] == 'O': @@ -406,8 +406,8 @@ def mn_do_mul(ir, instr, rd, ra, arg2): ExprOp('*', v1.signExtend(64), v2.signExtend(64))), ExprInt(1, 1), ExprInt(0, 1)) - ret.append(ExprAff(XER_OV, over_expr)) - ret.append(ExprAff(XER_SO, XER_SO | over_expr)) + ret.append(ExprAssign(XER_OV, over_expr)) + ret.append(ExprAssign(XER_SO, XER_SO | over_expr)) if instr.name[-1] == '.': ret += mn_compute_flags(rvalue, over_expr) @@ -416,7 +416,7 @@ def mn_do_mul(ir, instr, rd, ra, arg2): def mn_do_nand(ir, instr, ra, rs, rb): rvalue = ~(rs & rb) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -425,7 +425,7 @@ def mn_do_nand(ir, instr, ra, rs, rb): def mn_do_neg(ir, instr, rd, ra): rvalue = -ra - ret = [ ExprAff(rd, rvalue) ] + ret = [ ExprAssign(rd, rvalue) ] has_o = False over_expr = None @@ -433,8 +433,8 @@ def mn_do_neg(ir, instr, rd, ra): has_o = True over_expr = ExprCond(ra ^ ExprInt(0x80000000, 32), ExprInt(0, 1), ExprInt(1, 1)) - ret.append(ExprAff(XER_OV, over_expr)) - ret.append(ExprAff(XER_SO, XER_SO | over_expr)) + ret.append(ExprAssign(XER_OV, over_expr)) + ret.append(ExprAssign(XER_SO, XER_SO | over_expr)) if instr.name[-1] == '.': ret += mn_compute_flags(rvalue, over_expr) @@ -444,7 +444,7 @@ def mn_do_neg(ir, instr, rd, ra): def mn_do_nor(ir, instr, ra, rs, rb): rvalue = ~(rs | rb) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -458,7 +458,7 @@ def mn_do_or(ir, instr, ra, rs, arg2): oarg = arg2 rvalue = rs | oarg - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -467,13 +467,13 @@ def mn_do_or(ir, instr, ra, rs, arg2): def mn_do_rfi(ir, instr): dest = ExprCompose(ExprInt(0, 2), SRR0[2:32]) - ret = [ ExprAff(MSR, (MSR & + ret = [ ExprAssign(MSR, (MSR & ~ExprInt(0b1111111101110011, 32) | ExprCompose(SRR1[0:2], ExprInt(0, 2), SRR1[4:7], ExprInt(0, 1), SRR1[8:16], ExprInt(0, 16)))), - ExprAff(PC, dest), - ExprAff(ir.IRDst, dest) ] + ExprAssign(PC, dest), + ExprAssign(ir.IRDst, dest) ] return ret, [] def mn_do_rotate(ir, instr, ra, rs, shift, mb, me): @@ -486,7 +486,7 @@ def mn_do_rotate(ir, instr, ra, rs, shift, mb, me): if instr.name[0:6] == 'RLWIMI': rvalue = rvalue | (ra & ~m) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -497,7 +497,7 @@ def mn_do_slw(ir, instr, ra, rs, rb): rvalue = ExprCond(rb[5:6], ExprInt(0, 32), ExprOp('<<', rs, rb & ExprInt(0b11111, 32))) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -507,7 +507,7 @@ def mn_do_slw(ir, instr, ra, rs, rb): def mn_do_sraw(ir, instr, ra, rs, rb): rvalue = ExprCond(rb[5:6], ExprInt(0xFFFFFFFF, 32), ExprOp('a>>', rs, rb & ExprInt(0b11111, 32))) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -515,28 +515,28 @@ def mn_do_sraw(ir, instr, ra, rs, rb): mask = ExprCond(rb[5:6], ExprInt(0xFFFFFFFF, 32), (ExprInt(0xFFFFFFFF, 32) >> (ExprInt(32, 32) - (rb & ExprInt(0b11111, 32))))) - ret.append(ExprAff(XER_CA, rs.msb() & + ret.append(ExprAssign(XER_CA, rs.msb() & ExprCond(rs & mask, ExprInt(1, 1), ExprInt(0, 1)))) return ret, [] def mn_do_srawi(ir, instr, ra, rs, imm): rvalue = ExprOp('a>>', rs, imm) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) mask = ExprInt(0xFFFFFFFF >> (32 - imm.arg.arg), 32) - ret.append(ExprAff(XER_CA, rs.msb() & + ret.append(ExprAssign(XER_CA, rs.msb() & ExprCond(rs & mask, ExprInt(1, 1), ExprInt(0, 1)))) return ret, [] def mn_do_srw(ir, instr, ra, rs, rb): rvalue = rs >> (rb & ExprInt(0b11111, 32)) - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -549,7 +549,7 @@ def mn_do_stmw(ir, instr, rs, dest): ri = int(rs.name[1:],10) i = 0 while ri <= 31: - ret.append(ExprAff(ExprMem(address + ExprInt(i,32), 32), + ret.append(ExprAssign(ExprMem(address + ExprInt(i,32), 32), all_regs_ids_byname["R%d" % ri])) ri += 1 i += 4 @@ -596,29 +596,29 @@ def mn_do_store(ir, instr, arg1, arg2, arg3=None): if has_b: src = byte_swap(src) - ret.append(ExprAff(dest, src)) + ret.append(ExprAssign(dest, src)) if has_u: if arg3 is None: - ret.append(ExprAff(arg2.arg.args[0], address)) + ret.append(ExprAssign(arg2.arg.args[0], address)) else: - ret.append(ExprAff(arg2, address)) + ret.append(ExprAssign(arg2, address)) if is_stwcx: loc_do = ExprLoc(ir.loc_db.add_location(), ir.IRDst.size) loc_dont = ExprLoc(ir.loc_db.add_location(), ir.IRDst.size) loc_next = ExprLoc(ir.get_next_loc_key(instr), ir.IRDst.size) - flags = [ ExprAff(CR0_LT, ExprInt(0,1)), - ExprAff(CR0_GT, ExprInt(0,1)), - ExprAff(CR0_SO, XER_SO)] + flags = [ ExprAssign(CR0_LT, ExprInt(0,1)), + ExprAssign(CR0_GT, ExprInt(0,1)), + ExprAssign(CR0_SO, XER_SO)] ret += flags - ret.append(ExprAff(CR0_EQ, ExprInt(1,1))) - ret.append(ExprAff(ir.IRDst, loc_next)) - dont = flags + [ ExprAff(CR0_EQ, ExprInt(0,1)), - ExprAff(ir.IRDst, loc_next) ] + ret.append(ExprAssign(CR0_EQ, ExprInt(1,1))) + ret.append(ExprAssign(ir.IRDst, loc_next)) + dont = flags + [ ExprAssign(CR0_EQ, ExprInt(0,1)), + ExprAssign(ir.IRDst, loc_next) ] additional_ir = [ IRBlock(loc_do, [ AssignBlock(ret) ]), IRBlock(loc_dont, [ AssignBlock(dont) ]) ] - ret = [ ExprAff(reserve, ExprInt(0, 1)), - ExprAff(ir.IRDst, ExprCond(reserve, loc_do, loc_dont)) ] + ret = [ ExprAssign(reserve, ExprInt(0, 1)), + ExprAssign(ir.IRDst, ExprCond(reserve, loc_do, loc_dont)) ] return ret, additional_ir @@ -658,8 +658,8 @@ def mn_do_sub(ir, instr, arg1, arg2, arg3): msb2 = arg3.msb() msba = rvalue.msb() over_expr = (msb1 ^ msb2) & (msb1 ^ msba) - flags_update.append(ExprAff(XER_OV, over_expr)) - flags_update.append(ExprAff(XER_SO, XER_SO | over_expr)) + flags_update.append(ExprAssign(XER_OV, over_expr)) + flags_update.append(ExprAssign(XER_SO, XER_SO | over_expr)) if has_dot: flags_update += mn_compute_flags(rvalue, over_expr) @@ -667,13 +667,13 @@ def mn_do_sub(ir, instr, arg1, arg2, arg3): if has_c or has_e: carry_expr = ((((arg3 ^ arg2) ^ rvalue) ^ ((arg3 ^ rvalue) & (arg3 ^ arg2))).msb()) - flags_update.append(ExprAff(XER_CA, ~carry_expr)) + flags_update.append(ExprAssign(XER_CA, ~carry_expr)) - return ([ ExprAff(arg1, rvalue) ] + flags_update), [] + return ([ ExprAssign(arg1, rvalue) ] + flags_update), [] def mn_do_xor(ir, instr, ra, rs, rb): rvalue = rs ^ rb - ret = [ ExprAff(ra, rvalue) ] + ret = [ ExprAssign(ra, rvalue) ] if instr.name[-1] == '.': ret += mn_compute_flags(rvalue) @@ -683,15 +683,15 @@ def mn_do_xor(ir, instr, ra, rs, rb): def mn_b(ir, instr, arg1, arg2 = None): if arg2 is not None: arg1 = arg2 - return [ ExprAff(PC, arg1), ExprAff(ir.IRDst, arg1) ], [] + return [ ExprAssign(PC, arg1), ExprAssign(ir.IRDst, arg1) ], [] def mn_bl(ir, instr, arg1, arg2 = None): if arg2 is not None: arg1 = arg2 dst = ir.get_next_instr(instr) - return [ ExprAff(LR, ExprLoc(dst, 32)), - ExprAff(PC, arg1), - ExprAff(ir.IRDst, arg1) ], [] + return [ ExprAssign(LR, ExprLoc(dst, 32)), + ExprAssign(PC, arg1), + ExprAssign(ir.IRDst, arg1) ], [] def mn_get_condition(instr): bit = instr.additional_info.bi & 0b11 @@ -706,7 +706,7 @@ def mn_do_cond_branch(ir, instr, dest): if bo & 0b00100: ctr_cond = True else: - ret.append(ExprAff(CTR, CTR - ExprInt(1, 32))) + ret.append(ExprAssign(CTR, CTR - ExprInt(1, 32))) ctr_cond = ExprCond(CTR ^ ExprInt(1, 32), ExprInt(1, 1), ExprInt(0, 1)) if bo & 0b00010: ctr_cond = ~ctr_cond @@ -733,10 +733,10 @@ def mn_do_cond_branch(ir, instr, dest): if instr.name[-1] == 'L' or instr.name[-2:-1] == 'LA': dst = ir.get_next_instr(instr) - ret.append(ExprAff(LR, ExprLoc(dst, 32))) + ret.append(ExprAssign(LR, ExprLoc(dst, 32))) - ret.append(ExprAff(PC, dest_expr)) - ret.append(ExprAff(ir.IRDst, dest_expr)) + ret.append(ExprAssign(PC, dest_expr)) + ret.append(ExprAssign(ir.IRDst, dest_expr)) return ret, [] @@ -777,7 +777,7 @@ def mn_assign(arg1, arg2): def mn_stb(ir, instr, arg1, arg2): dest = ExprMem(arg2.arg, 8) - return [ExprAff(dest, ExprSlice(arg1, 0, 8))], [] + return [ExprAssign(dest, ExprSlice(arg1, 0, 8))], [] @sbuild.parse def mn_stwu(arg1, arg2): diff --git a/miasm2/arch/x86/arch.py b/miasm2/arch/x86/arch.py index 2abd5bbc..e2c515d1 100644 --- a/miasm2/arch/x86/arch.py +++ b/miasm2/arch/x86/arch.py @@ -881,7 +881,7 @@ class mn_x86(cls_mn): raise NotImplementedError('not fully functional') def ir_pre_instruction(self): - return [ExprAff(mRIP[self.mode], + return [ExprAssign(mRIP[self.mode], ExprInt(self.offset + self.l, mRIP[self.mode].size))] @classmethod diff --git a/miasm2/arch/x86/ira.py b/miasm2/arch/x86/ira.py index a95e6c69..749069f6 100644 --- a/miasm2/arch/x86/ira.py +++ b/miasm2/arch/x86/ira.py @@ -1,6 +1,6 @@ #-*- coding:utf-8 -*- -from miasm2.expression.expression import ExprAff, ExprOp +from miasm2.expression.expression import ExprAssign, ExprOp from miasm2.ir.ir import AssignBlock from miasm2.ir.analysis import ira from miasm2.arch.x86.sem import ir_x86_16, ir_x86_32, ir_x86_64 @@ -46,7 +46,7 @@ class ir_a_x86_64(ir_x86_64, ir_a_x86_16): def call_effects(self, ad, instr): call_assignblk = AssignBlock( [ - ExprAff( + ExprAssign( self.ret_reg, ExprOp( 'call_func_ret', @@ -58,7 +58,7 @@ class ir_a_x86_64(ir_x86_64, ir_a_x86_16): self.arch.regs.R9, ) ), - ExprAff(self.sp, ExprOp('call_func_stack', ad, self.sp)), + ExprAssign(self.sp, ExprOp('call_func_stack', ad, self.sp)), ], instr ) diff --git a/miasm2/arch/x86/sem.py b/miasm2/arch/x86/sem.py index 816608cb..727d0bc2 100644 --- a/miasm2/arch/x86/sem.py +++ b/miasm2/arch/x86/sem.py @@ -60,12 +60,12 @@ OF(A-B) = ((A XOR D) AND (A XOR B)) < 0 # XXX TODO make default check against 0 or not 0 (same eq as in C) def update_flag_zf_eq(a, b): - return [m2_expr.ExprAff(zf, m2_expr.ExprOp("FLAG_EQ_CMP", a, b))] + return [m2_expr.ExprAssign(zf, m2_expr.ExprOp("FLAG_EQ_CMP", a, b))] def update_flag_zf(a): return [ - m2_expr.ExprAff( + m2_expr.ExprAssign( zf, m2_expr.ExprCond( a, @@ -78,7 +78,7 @@ def update_flag_zf(a): def update_flag_nf(arg): return [ - m2_expr.ExprAff( + m2_expr.ExprAssign( nf, m2_expr.ExprOp("FLAG_SIGN_SUB", arg, m2_expr.ExprInt(0, arg.size)) ) @@ -86,13 +86,13 @@ def update_flag_nf(arg): def update_flag_pf(a): - return [m2_expr.ExprAff(pf, + return [m2_expr.ExprAssign(pf, m2_expr.ExprOp('parity', a & m2_expr.ExprInt(0xFF, a.size)))] def update_flag_af(op1, op2, res): - return [m2_expr.ExprAff(af, (op1 ^ op2 ^ res)[4:5])] + return [m2_expr.ExprAssign(af, (op1 ^ op2 ^ res)[4:5])] def update_flag_znp(a): @@ -112,8 +112,8 @@ def update_flag_np(result): def null_flag_co(): e = [] - e.append(m2_expr.ExprAff(of, m2_expr.ExprInt(0, of.size))) - e.append(m2_expr.ExprAff(cf, m2_expr.ExprInt(0, cf.size))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprInt(0, of.size))) + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprInt(0, cf.size))) return e @@ -124,10 +124,10 @@ def update_flag_arith(a): def update_flag_zfaddwc_eq(arg1, arg2, arg3): - return [m2_expr.ExprAff(zf, m2_expr.ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))] + return [m2_expr.ExprAssign(zf, m2_expr.ExprOp("FLAG_EQ_ADDWC", arg1, arg2, arg3))] def update_flag_zfsubwc_eq(arg1, arg2, arg3): - return [m2_expr.ExprAff(zf, m2_expr.ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))] + return [m2_expr.ExprAssign(zf, m2_expr.ExprOp("FLAG_EQ_SUBWC", arg1, arg2, arg3))] def update_flag_arith_add_znp(arg1, arg2): @@ -136,7 +136,7 @@ def update_flag_arith_add_znp(arg1, arg2): """ e = [] e += update_flag_zf_eq(arg1, -arg2) - e += [m2_expr.ExprAff(nf, m2_expr.ExprOp("FLAG_SIGN_SUB", arg1, -arg2))] + e += [m2_expr.ExprAssign(nf, m2_expr.ExprOp("FLAG_SIGN_SUB", arg1, -arg2))] e += update_flag_pf(arg1+arg2) return e @@ -147,7 +147,7 @@ def update_flag_arith_addwc_znp(arg1, arg2, arg3): """ e = [] e += update_flag_zfaddwc_eq(arg1, arg2, arg3) - e += [m2_expr.ExprAff(nf, m2_expr.ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))] + e += [m2_expr.ExprAssign(nf, m2_expr.ExprOp("FLAG_SIGN_ADDWC", arg1, arg2, arg3))] e += update_flag_pf(arg1+arg2+arg3.zeroExtend(arg2.size)) return e @@ -160,7 +160,7 @@ def update_flag_arith_sub_znp(arg1, arg2): """ e = [] e += update_flag_zf_eq(arg1, arg2) - e += [m2_expr.ExprAff(nf, m2_expr.ExprOp("FLAG_SIGN_SUB", arg1, arg2))] + e += [m2_expr.ExprAssign(nf, m2_expr.ExprOp("FLAG_SIGN_SUB", arg1, arg2))] e += update_flag_pf(arg1 - arg2) return e @@ -171,7 +171,7 @@ def update_flag_arith_subwc_znp(arg1, arg2, arg3): """ e = [] e += update_flag_zfsubwc_eq(arg1, arg2, arg3) - e += [m2_expr.ExprAff(nf, m2_expr.ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))] + e += [m2_expr.ExprAssign(nf, m2_expr.ExprOp("FLAG_SIGN_SUBWC", arg1, arg2, arg3))] e += update_flag_pf(arg1 - (arg2+arg3.zeroExtend(arg2.size))) return e @@ -192,45 +192,45 @@ def arith_flag(a, b, c): def update_flag_add_cf(op1, op2, res): "Compute cf in @res = @op1 + @op2" - #return [m2_expr.ExprAff(cf, m2_expr.ExprOp("FLAG_SUB_CF", op1, -op2))] - return [m2_expr.ExprAff(cf, m2_expr.ExprOp("FLAG_ADD_CF", op1, op2))] + #return [m2_expr.ExprAssign(cf, m2_expr.ExprOp("FLAG_SUB_CF", op1, -op2))] + return [m2_expr.ExprAssign(cf, m2_expr.ExprOp("FLAG_ADD_CF", op1, op2))] def update_flag_add_of(op1, op2, res): "Compute of in @res = @op1 + @op2" - return [m2_expr.ExprAff(of, m2_expr.ExprOp("FLAG_ADD_OF", op1, op2))] + return [m2_expr.ExprAssign(of, m2_expr.ExprOp("FLAG_ADD_OF", op1, op2))] # checked: ok for sbb add because b & c before +cf def update_flag_sub_cf(op1, op2, res): "Compote CF in @res = @op1 - @op2" - return [m2_expr.ExprAff(cf, m2_expr.ExprOp("FLAG_SUB_CF", op1, op2))] + return [m2_expr.ExprAssign(cf, m2_expr.ExprOp("FLAG_SUB_CF", op1, op2))] def update_flag_sub_of(op1, op2, res): "Compote OF in @res = @op1 - @op2" - return [m2_expr.ExprAff(of, m2_expr.ExprOp("FLAG_SUB_OF", op1, op2))] + return [m2_expr.ExprAssign(of, m2_expr.ExprOp("FLAG_SUB_OF", op1, op2))] def update_flag_addwc_cf(op1, op2, op3): "Compute cf in @res = @op1 + @op2 + @op3" - return [m2_expr.ExprAff(cf, m2_expr.ExprOp("FLAG_ADDWC_CF", op1, op2, op3))] + return [m2_expr.ExprAssign(cf, m2_expr.ExprOp("FLAG_ADDWC_CF", op1, op2, op3))] def update_flag_addwc_of(op1, op2, op3): "Compute of in @res = @op1 + @op2 + @op3" - return [m2_expr.ExprAff(of, m2_expr.ExprOp("FLAG_ADDWC_OF", op1, op2, op3))] + return [m2_expr.ExprAssign(of, m2_expr.ExprOp("FLAG_ADDWC_OF", op1, op2, op3))] def update_flag_subwc_cf(op1, op2, op3): "Compute cf in @res = @op1 + @op2 + @op3" - return [m2_expr.ExprAff(cf, m2_expr.ExprOp("FLAG_SUBWC_CF", op1, op2, op3))] + return [m2_expr.ExprAssign(cf, m2_expr.ExprOp("FLAG_SUBWC_CF", op1, op2, op3))] def update_flag_subwc_of(op1, op2, op3): "Compute of in @res = @op1 + @op2 + @op3" - return [m2_expr.ExprAff(of, m2_expr.ExprOp("FLAG_SUBWC_OF", op1, op2, op3))] + return [m2_expr.ExprAssign(of, m2_expr.ExprOp("FLAG_SUBWC_OF", op1, op2, op3))] @@ -269,9 +269,9 @@ def update_flag_arith_subwc_co(arg1, arg2, arg3): def set_float_cs_eip(instr): e = [] # XXX TODO check float updt - e.append(m2_expr.ExprAff(float_eip, + e.append(m2_expr.ExprAssign(float_eip, m2_expr.ExprInt(instr.offset, float_eip.size))) - e.append(m2_expr.ExprAff(float_cs, CS)) + e.append(m2_expr.ExprAssign(float_cs, CS)) return e @@ -358,8 +358,8 @@ def gen_jcc(ir, instr, cond, dst, jmp_if): mn_dst = m2_expr.ExprCond(cond, dstA.zeroExtend(ir.IRDst.size), dstB.zeroExtend(ir.IRDst.size)) - e.append(m2_expr.ExprAff(meip, mn_dst)) - e.append(m2_expr.ExprAff(ir.IRDst, mn_dst)) + e.append(m2_expr.ExprAssign(meip, mn_dst)) + e.append(m2_expr.ExprAssign(ir.IRDst, mn_dst)) return e, [] @@ -378,9 +378,9 @@ def gen_fcmov(ir, instr, cond, arg1, arg2, mov_if): else: dstA, dstB = loc_skip_expr, loc_do_expr e = [] - e_do, extra_irs = [m2_expr.ExprAff(arg1, arg2)], [] - e_do.append(m2_expr.ExprAff(ir.IRDst, loc_skip_expr)) - e.append(m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(cond, dstA, dstB))) + e_do, extra_irs = [m2_expr.ExprAssign(arg1, arg2)], [] + e_do.append(m2_expr.ExprAssign(ir.IRDst, loc_skip_expr)) + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(cond, dstA, dstB))) return e, [IRBlock(loc_do, [AssignBlock(e_do, instr)])] @@ -400,8 +400,8 @@ def gen_cmov(ir, instr, cond, dst, src, mov_if): dstA, dstB = loc_skip_expr, loc_do_expr e = [] e_do, extra_irs = mov(ir, instr, dst, src) - e_do.append(m2_expr.ExprAff(ir.IRDst, loc_skip_expr)) - e.append(m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(cond, dstA, dstB))) + e_do.append(m2_expr.ExprAssign(ir.IRDst, loc_skip_expr)) + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(cond, dstA, dstB))) return e, [IRBlock(loc_do, [AssignBlock(e_do, instr)])] @@ -410,7 +410,7 @@ def mov(_, instr, dst, src): src = src[:dst.size] if src in [ES, CS, SS, DS, FS, GS]: src = src.zeroExtend(dst.size) - e = [m2_expr.ExprAff(dst, src)] + e = [m2_expr.ExprAssign(dst, src)] return e, [] @@ -418,7 +418,7 @@ def movq(_, instr, dst, src): src_final = (src.zeroExtend(dst.size) if dst.size >= src.size else src[:dst.size]) - return [m2_expr.ExprAff(dst, src_final)], [] + return [m2_expr.ExprAssign(dst, src_final)], [] @sbuild.parse @@ -429,12 +429,12 @@ def xchg(arg1, arg2): def movzx(_, instr, dst, src): - e = [m2_expr.ExprAff(dst, src.zeroExtend(dst.size))] + e = [m2_expr.ExprAssign(dst, src.zeroExtend(dst.size))] return e, [] def movsx(_, instr, dst, src): - e = [m2_expr.ExprAff(dst, src.signExtend(dst.size))] + e = [m2_expr.ExprAssign(dst, src.signExtend(dst.size))] return e, [] @@ -446,7 +446,7 @@ def lea(_, instr, dst, src): if ptr.size > dst.size: ptr = ptr[:dst.size] - e = [m2_expr.ExprAff(dst, ptr.zeroExtend(dst.size))] + e = [m2_expr.ExprAssign(dst, ptr.zeroExtend(dst.size))] return e, [] @@ -458,7 +458,7 @@ def add(_, instr, dst, src): e += update_flag_arith_add_znp(dst, src) e += update_flag_arith_add_co(dst, src, result) e += update_flag_af(dst, src, result) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -470,8 +470,8 @@ def xadd(_, instr, dst, src): e += update_flag_arith_add_co(src, dst, result) e += update_flag_af(dst, src, result) if dst != src: - e.append(m2_expr.ExprAff(src, dst)) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(src, dst)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -485,7 +485,7 @@ def adc(_, instr, dst, src): e += update_flag_arith_addwc_znp(arg1, arg2, cf) e += update_flag_arith_addwc_co(arg1, arg2, cf) e += update_flag_af(arg1, arg2, result) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -498,7 +498,7 @@ def sub(_, instr, dst, src): e += update_flag_arith_sub_co(arg1, arg2, result) e += update_flag_af(dst, src, result) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] # a-(b+cf) @@ -513,7 +513,7 @@ def sbb(_, instr, dst, src): e += update_flag_arith_subwc_znp(arg1, arg2, cf) e += update_flag_af(arg1, arg2, result) e += update_flag_arith_subwc_co(arg1, arg2, cf) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -526,14 +526,14 @@ def neg(_, instr, src): e += update_flag_arith_sub_znp(arg1, arg2) e += update_flag_arith_sub_co(arg1, arg2, result) e += update_flag_af(arg1, arg2, result) - e.append(m2_expr.ExprAff(src, result)) + e.append(m2_expr.ExprAssign(src, result)) return (e, []) def l_not(_, instr, dst): e = [] result = (~dst) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return (e, []) @@ -551,38 +551,38 @@ def l_cmp(_, instr, dst, src): def xor(_, instr, dst, src): e = [] result = dst ^ src - e += [m2_expr.ExprAff(zf, m2_expr.ExprOp('FLAG_EQ_CMP', dst, src))] + e += [m2_expr.ExprAssign(zf, m2_expr.ExprOp('FLAG_EQ_CMP', dst, src))] e += update_flag_np(result) e += null_flag_co() - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return (e, []) def pxor(_, instr, dst, src): e = [] result = dst ^ src - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return (e, []) def l_or(_, instr, dst, src): e = [] result = dst | src - e += [m2_expr.ExprAff(zf, m2_expr.ExprOp('FLAG_EQ', dst | src))] + e += [m2_expr.ExprAssign(zf, m2_expr.ExprOp('FLAG_EQ', dst | src))] e += update_flag_np(result) e += null_flag_co() - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return (e, []) def l_and(_, instr, dst, src): e = [] result = dst & src - e += [m2_expr.ExprAff(zf, m2_expr.ExprOp('FLAG_EQ_AND', dst, src))] + e += [m2_expr.ExprAssign(zf, m2_expr.ExprOp('FLAG_EQ_AND', dst, src))] e += update_flag_np(result) e += null_flag_co() - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return (e, []) @@ -590,8 +590,8 @@ def l_test(_, instr, dst, src): e = [] result = dst & src - e += [m2_expr.ExprAff(zf, m2_expr.ExprOp('FLAG_EQ_CMP', result, m2_expr.ExprInt(0, result.size)))] - e += [m2_expr.ExprAff(nf, m2_expr.ExprOp("FLAG_SIGN_SUB", result, m2_expr.ExprInt(0, result.size)))] + e += [m2_expr.ExprAssign(zf, m2_expr.ExprOp('FLAG_EQ_CMP', result, m2_expr.ExprInt(0, result.size)))] + e += [m2_expr.ExprAssign(nf, m2_expr.ExprOp("FLAG_SIGN_SUB", result, m2_expr.ExprInt(0, result.size)))] e += update_flag_pf(result) e += null_flag_co() @@ -632,9 +632,9 @@ def _rotate_tpl(ir, instr, dst, src, op, left=False): res.msb() ^ new_cf if left else (dst ^ res).msb()) # Build basic blocks - e_do = [m2_expr.ExprAff(cf, new_cf), - m2_expr.ExprAff(of, new_of), - m2_expr.ExprAff(dst, res) + e_do = [m2_expr.ExprAssign(cf, new_cf), + m2_expr.ExprAssign(of, new_of), + m2_expr.ExprAssign(dst, res) ] # Don't generate conditional shifter on constant if isinstance(shifter, m2_expr.ExprInt): @@ -647,8 +647,8 @@ def _rotate_tpl(ir, instr, dst, src, op, left=False): loc_skip = ir.get_next_loc_key(instr) loc_skip_expr = m2_expr.ExprLoc(loc_skip, ir.IRDst.size) - e_do.append(m2_expr.ExprAff(ir.IRDst, loc_skip_expr)) - e.append(m2_expr.ExprAff( + e_do.append(m2_expr.ExprAssign(ir.IRDst, loc_skip_expr)) + e.append(m2_expr.ExprAssign( ir.IRDst, m2_expr.ExprCond(shifter, loc_do_expr, loc_skip_expr))) return (e, [IRBlock(loc_do, [AssignBlock(e_do, instr)])]) @@ -681,9 +681,9 @@ def rotate_with_carry_tpl(ir, instr, op, dst, src): # Build basic blocks - e_do = [m2_expr.ExprAff(cf, new_cf), - m2_expr.ExprAff(of, new_of), - m2_expr.ExprAff(dst, new_dst) + e_do = [m2_expr.ExprAssign(cf, new_cf), + m2_expr.ExprAssign(of, new_of), + m2_expr.ExprAssign(dst, new_dst) ] # Don't generate conditional shifter on constant if isinstance(shifter, m2_expr.ExprInt): @@ -696,8 +696,8 @@ def rotate_with_carry_tpl(ir, instr, op, dst, src): loc_skip = ir.get_next_loc_key(instr) loc_skip_expr = m2_expr.ExprLoc(loc_skip, ir.IRDst.size) - e_do.append(m2_expr.ExprAff(ir.IRDst, loc_skip_expr)) - e.append(m2_expr.ExprAff( + e_do.append(m2_expr.ExprAssign(ir.IRDst, loc_skip_expr)) + e.append(m2_expr.ExprAssign( ir.IRDst, m2_expr.ExprCond(shifter, loc_do_expr, loc_skip_expr))) return (e, [IRBlock(loc_do, [AssignBlock(e_do, instr)])]) @@ -765,11 +765,11 @@ def _shift_tpl(op, ir, instr, a, b, c=None, op_inv=None, left=False, # Build basic blocks e_do = [ - m2_expr.ExprAff(cf, new_cf), - m2_expr.ExprAff(of, m2_expr.ExprCond(shifter - i1, + m2_expr.ExprAssign(cf, new_cf), + m2_expr.ExprAssign(of, m2_expr.ExprCond(shifter - i1, m2_expr.ExprInt(0, of.size), value_of)), - m2_expr.ExprAff(a, res), + m2_expr.ExprAssign(a, res), ] e_do += update_flag_znp(res) @@ -784,8 +784,8 @@ def _shift_tpl(op, ir, instr, a, b, c=None, op_inv=None, left=False, loc_do, loc_do_expr = ir.gen_loc_key_and_expr(ir.IRDst.size) loc_skip = ir.get_next_loc_key(instr) loc_skip_expr = m2_expr.ExprLoc(loc_skip, ir.IRDst.size) - e_do.append(m2_expr.ExprAff(ir.IRDst, loc_skip_expr)) - e.append(m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(shifter, loc_do_expr, + e_do.append(m2_expr.ExprAssign(ir.IRDst, loc_skip_expr)) + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(shifter, loc_do_expr, loc_skip_expr))) return e, [IRBlock(loc_do, [AssignBlock(e_do, instr)])] @@ -814,38 +814,38 @@ def shld(ir, instr, dst, src1, src2): # XXX todo ### def cmc(_, instr): - e = [m2_expr.ExprAff(cf, m2_expr.ExprCond(cf, m2_expr.ExprInt(0, cf.size), + e = [m2_expr.ExprAssign(cf, m2_expr.ExprCond(cf, m2_expr.ExprInt(0, cf.size), m2_expr.ExprInt(1, cf.size)))] return e, [] def clc(_, instr): - e = [m2_expr.ExprAff(cf, m2_expr.ExprInt(0, cf.size))] + e = [m2_expr.ExprAssign(cf, m2_expr.ExprInt(0, cf.size))] return e, [] def stc(_, instr): - e = [m2_expr.ExprAff(cf, m2_expr.ExprInt(1, cf.size))] + e = [m2_expr.ExprAssign(cf, m2_expr.ExprInt(1, cf.size))] return e, [] def cld(_, instr): - e = [m2_expr.ExprAff(df, m2_expr.ExprInt(0, df.size))] + e = [m2_expr.ExprAssign(df, m2_expr.ExprInt(0, df.size))] return e, [] def std(_, instr): - e = [m2_expr.ExprAff(df, m2_expr.ExprInt(1, df.size))] + e = [m2_expr.ExprAssign(df, m2_expr.ExprInt(1, df.size))] return e, [] def cli(_, instr): - e = [m2_expr.ExprAff(i_f, m2_expr.ExprInt(0, i_f.size))] + e = [m2_expr.ExprAssign(i_f, m2_expr.ExprInt(0, i_f.size))] return e, [] def sti(_, instr): - e = [m2_expr.ExprAff(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))] + e = [m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))] return e, [] @@ -859,7 +859,7 @@ def inc(_, instr, dst): e += update_flag_af(arg1, arg2, result) e += update_flag_add_of(arg1, arg2, result) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -873,7 +873,7 @@ def dec(_, instr, dst): e += update_flag_af(arg1, arg2, result) e += update_flag_sub_of(arg1, arg2, result) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -887,10 +887,10 @@ def push_gen(ir, instr, src, size): sp = mRSP[instr.mode] new_sp = sp - m2_expr.ExprInt(off_size / 8, sp.size) - e.append(m2_expr.ExprAff(sp, new_sp)) + e.append(m2_expr.ExprAssign(sp, new_sp)) if ir.do_stk_segm: new_sp = ir.gen_segm_expr(SS, new_sp) - e.append(m2_expr.ExprAff(ir.ExprMem(new_sp, off_size), + e.append(m2_expr.ExprAssign(ir.ExprMem(new_sp, off_size), src)) return e, [] @@ -912,7 +912,7 @@ def pop_gen(ir, instr, src, size): new_sp = sp + m2_expr.ExprInt(src.size / 8, sp.size) # don't generate ESP incrementation on POP ESP if src != ir.sp: - e.append(m2_expr.ExprAff(sp, new_sp)) + e.append(m2_expr.ExprAssign(sp, new_sp)) # XXX FIX XXX for pop [esp] if isinstance(src, m2_expr.ExprMem): src = expr_simp(src.replace_expr({sp: new_sp})) @@ -920,7 +920,7 @@ def pop_gen(ir, instr, src, size): if ir.do_stk_segm: result = ir.gen_segm_expr(SS, result) - e.append(m2_expr.ExprAff(src, ir.ExprMem(result, src.size))) + e.append(m2_expr.ExprAssign(src, ir.ExprMem(result, src.size))) return e, [] @@ -935,7 +935,7 @@ def popw(ir, instr, src): def sete(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_EQ", zf).zeroExtend(dst.size), ) @@ -946,7 +946,7 @@ def sete(_, instr, dst): def setnz(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_EQ", ~zf).zeroExtend(dst.size), ) @@ -957,7 +957,7 @@ def setnz(_, instr, dst): def setl(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_S<", nf, of).zeroExtend(dst.size), ) @@ -968,7 +968,7 @@ def setl(_, instr, dst): def setg(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_S>", nf, of, zf).zeroExtend(dst.size), ) @@ -979,7 +979,7 @@ def setg(_, instr, dst): def setge(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_S>=", nf, of).zeroExtend(dst.size), ) @@ -990,7 +990,7 @@ def setge(_, instr, dst): def seta(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U>", cf, zf).zeroExtend(dst.size), ) @@ -1001,7 +1001,7 @@ def seta(_, instr, dst): def setae(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U>=", cf).zeroExtend(dst.size), ) @@ -1012,7 +1012,7 @@ def setae(_, instr, dst): def setb(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U<", cf).zeroExtend(dst.size), ) @@ -1023,7 +1023,7 @@ def setb(_, instr, dst): def setbe(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U<=", cf, zf).zeroExtend(dst.size), ) @@ -1034,7 +1034,7 @@ def setbe(_, instr, dst): def setns(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_NEG", ~nf).zeroExtend(dst.size), ) @@ -1045,7 +1045,7 @@ def setns(_, instr, dst): def sets(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_NEG", nf).zeroExtend(dst.size), ) @@ -1056,7 +1056,7 @@ def sets(_, instr, dst): def seto(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, of.zeroExtend(dst.size) ) @@ -1067,7 +1067,7 @@ def seto(_, instr, dst): def setp(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, pf.zeroExtend(dst.size) ) @@ -1078,7 +1078,7 @@ def setp(_, instr, dst): def setnp(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprCond( pf, @@ -1093,7 +1093,7 @@ def setnp(_, instr, dst): def setle(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_S<=", nf, of, zf).zeroExtend(dst.size), ) @@ -1104,7 +1104,7 @@ def setle(_, instr, dst): def setna(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U<=", cf, zf).zeroExtend(dst.size), ) @@ -1115,7 +1115,7 @@ def setna(_, instr, dst): def setnbe(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U>", cf, zf).zeroExtend(dst.size), ) @@ -1126,7 +1126,7 @@ def setnbe(_, instr, dst): def setno(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprCond( of, @@ -1141,7 +1141,7 @@ def setno(_, instr, dst): def setnb(_, instr, dst): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst, m2_expr.ExprOp("CC_U>=", cf).zeroExtend(dst.size), ) @@ -1153,7 +1153,7 @@ def setalc(_, instr): dst = mRAX[instr.mode][0:8] e = [] e.append( - m2_expr.ExprAff(dst, m2_expr.ExprCond(cf, m2_expr.ExprInt(0xff, dst.size), + m2_expr.ExprAssign(dst, m2_expr.ExprCond(cf, m2_expr.ExprInt(0xff, dst.size), m2_expr.ExprInt(0, dst.size)))) return e, [] @@ -1170,7 +1170,7 @@ def bswap(_, instr, dst): dst[24:32], dst[16:24], dst[8:16], dst[:8]) else: raise ValueError('the size DOES matter') - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -1199,18 +1199,18 @@ def cmps(ir, instr, size): e0 = [] - e0.append(m2_expr.ExprAff(src1, src1 + offset)) - e0.append(m2_expr.ExprAff(src2, src2 + offset)) - e0.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e0.append(m2_expr.ExprAssign(src1, src1 + offset)) + e0.append(m2_expr.ExprAssign(src2, src2 + offset)) + e0.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e0 = IRBlock(loc_df_0, [AssignBlock(e0, instr)]) e1 = [] - e1.append(m2_expr.ExprAff(src1, src1 - offset)) - e1.append(m2_expr.ExprAff(src2, src2 - offset)) - e1.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e1.append(m2_expr.ExprAssign(src1, src1 - offset)) + e1.append(m2_expr.ExprAssign(src2, src2 - offset)) + e1.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e1 = IRBlock(loc_df_1, [AssignBlock(e1, instr)]) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(df, loc_df_1_expr, loc_df_0_expr))) return e, [e0, e1] @@ -1236,17 +1236,17 @@ def scas(ir, instr, size): ir.ExprMem(src_sgm, size)) e0 = [] - e0.append(m2_expr.ExprAff(src, src + offset)) + e0.append(m2_expr.ExprAssign(src, src + offset)) - e0.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e0.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e0 = IRBlock(loc_df_0, [AssignBlock(e0, instr)]) e1 = [] - e1.append(m2_expr.ExprAff(src, src - offset)) - e1.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e1.append(m2_expr.ExprAssign(src, src - offset)) + e1.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e1 = IRBlock(loc_df_1, [AssignBlock(e1, instr)]) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(df, loc_df_1_expr, loc_df_0_expr))) return e, [e0, e1] @@ -1284,26 +1284,26 @@ def pushfw(ir, instr): def popfd(ir, instr): tmp = ir.ExprMem(mRSP[instr.mode], 32) e = [] - e.append(m2_expr.ExprAff(cf, m2_expr.ExprSlice(tmp, 0, 1))) - e.append(m2_expr.ExprAff(pf, m2_expr.ExprSlice(tmp, 2, 3))) - e.append(m2_expr.ExprAff(af, m2_expr.ExprSlice(tmp, 4, 5))) - e.append(m2_expr.ExprAff(zf, m2_expr.ExprSlice(tmp, 6, 7))) - e.append(m2_expr.ExprAff(nf, m2_expr.ExprSlice(tmp, 7, 8))) - e.append(m2_expr.ExprAff(tf, m2_expr.ExprSlice(tmp, 8, 9))) - e.append(m2_expr.ExprAff(i_f, m2_expr.ExprSlice(tmp, 9, 10))) - e.append(m2_expr.ExprAff(df, m2_expr.ExprSlice(tmp, 10, 11))) - e.append(m2_expr.ExprAff(of, m2_expr.ExprSlice(tmp, 11, 12))) - e.append(m2_expr.ExprAff(iopl, m2_expr.ExprSlice(tmp, 12, 14))) - e.append(m2_expr.ExprAff(nt, m2_expr.ExprSlice(tmp, 14, 15))) - e.append(m2_expr.ExprAff(rf, m2_expr.ExprSlice(tmp, 16, 17))) - e.append(m2_expr.ExprAff(vm, m2_expr.ExprSlice(tmp, 17, 18))) - e.append(m2_expr.ExprAff(ac, m2_expr.ExprSlice(tmp, 18, 19))) - e.append(m2_expr.ExprAff(vif, m2_expr.ExprSlice(tmp, 19, 20))) - e.append(m2_expr.ExprAff(vip, m2_expr.ExprSlice(tmp, 20, 21))) - e.append(m2_expr.ExprAff(i_d, m2_expr.ExprSlice(tmp, 21, 22))) - e.append(m2_expr.ExprAff(mRSP[instr.mode], + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprSlice(tmp, 0, 1))) + e.append(m2_expr.ExprAssign(pf, m2_expr.ExprSlice(tmp, 2, 3))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprSlice(tmp, 4, 5))) + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprSlice(tmp, 6, 7))) + e.append(m2_expr.ExprAssign(nf, m2_expr.ExprSlice(tmp, 7, 8))) + e.append(m2_expr.ExprAssign(tf, m2_expr.ExprSlice(tmp, 8, 9))) + e.append(m2_expr.ExprAssign(i_f, m2_expr.ExprSlice(tmp, 9, 10))) + e.append(m2_expr.ExprAssign(df, m2_expr.ExprSlice(tmp, 10, 11))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprSlice(tmp, 11, 12))) + e.append(m2_expr.ExprAssign(iopl, m2_expr.ExprSlice(tmp, 12, 14))) + e.append(m2_expr.ExprAssign(nt, m2_expr.ExprSlice(tmp, 14, 15))) + e.append(m2_expr.ExprAssign(rf, m2_expr.ExprSlice(tmp, 16, 17))) + e.append(m2_expr.ExprAssign(vm, m2_expr.ExprSlice(tmp, 17, 18))) + e.append(m2_expr.ExprAssign(ac, m2_expr.ExprSlice(tmp, 18, 19))) + e.append(m2_expr.ExprAssign(vif, m2_expr.ExprSlice(tmp, 19, 20))) + e.append(m2_expr.ExprAssign(vip, m2_expr.ExprSlice(tmp, 20, 21))) + e.append(m2_expr.ExprAssign(i_d, m2_expr.ExprSlice(tmp, 21, 22))) + e.append(m2_expr.ExprAssign(mRSP[instr.mode], mRSP[instr.mode] + m2_expr.ExprInt(instr.mode / 8, mRSP[instr.mode].size))) - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprCond(m2_expr.ExprSlice(tmp, 8, 9), m2_expr.ExprInt( EXCEPT_SOFT_BP, 32), @@ -1318,7 +1318,7 @@ def _tpl_eflags(tmp): """Extract eflags from @tmp @tmp: Expr instance with a size >= 16 """ - return [m2_expr.ExprAff(dest, tmp[base:base + dest.size]) + return [m2_expr.ExprAssign(dest, tmp[base:base + dest.size]) for base, dest in ((0, cf), (2, pf), (4, af), (6, zf), (7, nf), (8, tf), (9, i_f), (10, df), (11, of), (12, iopl), (14, nt))] @@ -1328,7 +1328,7 @@ def popfw(ir, instr): tmp = ir.ExprMem(mRSP[instr.mode], 32) e = _tpl_eflags(tmp) e.append( - m2_expr.ExprAff(mRSP[instr.mode], mRSP[instr.mode] + m2_expr.ExprInt(2, mRSP[instr.mode].size))) + m2_expr.ExprAssign(mRSP[instr.mode], mRSP[instr.mode] + m2_expr.ExprInt(2, mRSP[instr.mode].size))) return e, [] pa_regs = [ @@ -1344,8 +1344,8 @@ def pusha_gen(ir, instr, size): cur_sp = mRSP[instr.mode] for i, reg in enumerate(pa_regs): stk_ptr = cur_sp + m2_expr.ExprInt(-(size / 8) * (i + 1), instr.mode) - e.append(m2_expr.ExprAff(ir.ExprMem(stk_ptr, size), reg[size])) - e.append(m2_expr.ExprAff(cur_sp, stk_ptr)) + e.append(m2_expr.ExprAssign(ir.ExprMem(stk_ptr, size), reg[size])) + e.append(m2_expr.ExprAssign(cur_sp, stk_ptr)) return e, [] @@ -1364,10 +1364,10 @@ def popa_gen(ir, instr, size): if reg == mRSP: continue stk_ptr = cur_sp + m2_expr.ExprInt((size / 8) * i, instr.mode) - e.append(m2_expr.ExprAff(reg[size], ir.ExprMem(stk_ptr, size))) + e.append(m2_expr.ExprAssign(reg[size], ir.ExprMem(stk_ptr, size))) stk_ptr = cur_sp + m2_expr.ExprInt((size / 8) * (i + 1), instr.mode) - e.append(m2_expr.ExprAff(cur_sp, stk_ptr)) + e.append(m2_expr.ExprAssign(cur_sp, stk_ptr)) return e, [] @@ -1406,31 +1406,31 @@ def call(ir, instr, dst): else: raise RuntimeError("bad call operator") - e.append(m2_expr.ExprAff(CS, m1)) - e.append(m2_expr.ExprAff(meip, m2)) + e.append(m2_expr.ExprAssign(CS, m1)) + e.append(m2_expr.ExprAssign(meip, m2)) - e.append(m2_expr.ExprAff(ir.IRDst, m2)) + e.append(m2_expr.ExprAssign(ir.IRDst, m2)) c = myesp + m2_expr.ExprInt(-s / 8, s) - e.append(m2_expr.ExprAff(ir.ExprMem(c, size=s).zeroExtend(s), + e.append(m2_expr.ExprAssign(ir.ExprMem(c, size=s).zeroExtend(s), CS.zeroExtend(s))) c = myesp + m2_expr.ExprInt(-2 * s / 8, s) - e.append(m2_expr.ExprAff(ir.ExprMem(c, size=s).zeroExtend(s), + e.append(m2_expr.ExprAssign(ir.ExprMem(c, size=s).zeroExtend(s), meip.zeroExtend(s))) c = myesp + m2_expr.ExprInt((-2 * s) / 8, s) - e.append(m2_expr.ExprAff(myesp, c)) + e.append(m2_expr.ExprAssign(myesp, c)) return e, [] c = myesp + m2_expr.ExprInt((-s / 8), s) - e.append(m2_expr.ExprAff(myesp, c)) + e.append(m2_expr.ExprAssign(myesp, c)) if ir.do_stk_segm: c = ir.gen_segm_expr(SS, c) - e.append(m2_expr.ExprAff(ir.ExprMem(c, size=s), n)) - e.append(m2_expr.ExprAff(meip, dst.zeroExtend(ir.IRDst.size))) - e.append(m2_expr.ExprAff(ir.IRDst, dst.zeroExtend(ir.IRDst.size))) + e.append(m2_expr.ExprAssign(ir.ExprMem(c, size=s), n)) + e.append(m2_expr.ExprAssign(meip, dst.zeroExtend(ir.IRDst.size))) + e.append(m2_expr.ExprAssign(ir.IRDst, dst.zeroExtend(ir.IRDst.size))) return e, [] @@ -1446,14 +1446,14 @@ def ret(ir, instr, src=None): src = m2_expr.ExprInt(int(src), size) value = (myesp + (m2_expr.ExprInt((size / 8), size) + src)) - e.append(m2_expr.ExprAff(myesp, value)) + e.append(m2_expr.ExprAssign(myesp, value)) result = myesp if ir.do_stk_segm: result = ir.gen_segm_expr(SS, result) - e.append(m2_expr.ExprAff(meip, ir.ExprMem( + e.append(m2_expr.ExprAssign(meip, ir.ExprMem( result, size=size).zeroExtend(size))) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, ir.ExprMem(result, size=size).zeroExtend(size))) return e, [] @@ -1472,19 +1472,19 @@ def retf(ir, instr, src=None): if ir.do_stk_segm: result = ir.gen_segm_expr(SS, result) - e.append(m2_expr.ExprAff(meip, ir.ExprMem( + e.append(m2_expr.ExprAssign(meip, ir.ExprMem( result, size=size).zeroExtend(size))) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, ir.ExprMem(result, size=size).zeroExtend(size))) - # e.append(m2_expr.ExprAff(meip, ir.ExprMem(c, size = s))) + # e.append(m2_expr.ExprAssign(meip, ir.ExprMem(c, size = s))) result = myesp + m2_expr.ExprInt(size / 8, size) if ir.do_stk_segm: result = ir.gen_segm_expr(SS, result) - e.append(m2_expr.ExprAff(CS, ir.ExprMem(result, size=16))) + e.append(m2_expr.ExprAssign(CS, ir.ExprMem(result, size=16))) value = myesp + (m2_expr.ExprInt((2 * size) / 8, size) + src) - e.append(m2_expr.ExprAff(myesp, value)) + e.append(m2_expr.ExprAssign(myesp, value)) return e, [] @@ -1492,8 +1492,8 @@ def leave(ir, instr): size = instr.mode myesp = mRSP[size] e = [] - e.append(m2_expr.ExprAff(mRBP[size], ir.ExprMem(mRBP[size], size=size))) - e.append(m2_expr.ExprAff(myesp, + e.append(m2_expr.ExprAssign(mRBP[size], ir.ExprMem(mRBP[size], size=size))) + e.append(m2_expr.ExprAssign(myesp, m2_expr.ExprInt(size / 8, size) + mRBP[size])) return e, [] @@ -1507,10 +1507,10 @@ def enter(ir, instr, src1, src2): e = [] esp_tmp = myesp - m2_expr.ExprInt(size / 8, size) - e.append(m2_expr.ExprAff(ir.ExprMem(esp_tmp, size=size), + e.append(m2_expr.ExprAssign(ir.ExprMem(esp_tmp, size=size), myebp)) - e.append(m2_expr.ExprAff(myebp, esp_tmp)) - e.append(m2_expr.ExprAff(myesp, + e.append(m2_expr.ExprAssign(myebp, esp_tmp)) + e.append(m2_expr.ExprAssign(myesp, myesp - (src1 + m2_expr.ExprInt(size / 8, size)))) return e, [] @@ -1534,14 +1534,14 @@ def jmp(ir, instr, dst): else: raise RuntimeError("bad jmp operator") - e.append(m2_expr.ExprAff(CS, m1)) - e.append(m2_expr.ExprAff(meip, m2)) - e.append(m2_expr.ExprAff(ir.IRDst, m2)) + e.append(m2_expr.ExprAssign(CS, m1)) + e.append(m2_expr.ExprAssign(meip, m2)) + e.append(m2_expr.ExprAssign(ir.IRDst, m2)) else: # Classic jmp - e.append(m2_expr.ExprAff(meip, dst)) - e.append(m2_expr.ExprAff(ir.IRDst, dst)) + e.append(m2_expr.ExprAssign(meip, dst)) + e.append(m2_expr.ExprAssign(ir.IRDst, dst)) if isinstance(dst, m2_expr.ExprMem): dst = meip @@ -1650,9 +1650,9 @@ def loop(ir, instr, dst): dst_o = m2_expr.ExprCond(c, dst.zeroExtend(ir.IRDst.size), n.zeroExtend(ir.IRDst.size)) - e.append(m2_expr.ExprAff(myecx, c)) - e.append(m2_expr.ExprAff(meip, dst_o)) - e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) + e.append(m2_expr.ExprAssign(myecx, c)) + e.append(m2_expr.ExprAssign(meip, dst_o)) + e.append(m2_expr.ExprAssign(ir.IRDst, dst_o)) return e, [] @@ -1669,12 +1669,12 @@ def loopne(ir, instr, dst): m2_expr.ExprInt(0, 1)) c &= zf ^ m2_expr.ExprInt(1, 1) - e.append(m2_expr.ExprAff(myecx, myecx - m2_expr.ExprInt(1, myecx.size))) + e.append(m2_expr.ExprAssign(myecx, myecx - m2_expr.ExprInt(1, myecx.size))) dst_o = m2_expr.ExprCond(c, dst.zeroExtend(ir.IRDst.size), n.zeroExtend(ir.IRDst.size)) - e.append(m2_expr.ExprAff(meip, dst_o)) - e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) + e.append(m2_expr.ExprAssign(meip, dst_o)) + e.append(m2_expr.ExprAssign(ir.IRDst, dst_o)) return e, [] @@ -1689,12 +1689,12 @@ def loope(ir, instr, dst): m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)) c &= zf - e.append(m2_expr.ExprAff(myecx, myecx - m2_expr.ExprInt(1, myecx.size))) + e.append(m2_expr.ExprAssign(myecx, myecx - m2_expr.ExprInt(1, myecx.size))) dst_o = m2_expr.ExprCond(c, dst.zeroExtend(ir.IRDst.size), n.zeroExtend(ir.IRDst.size)) - e.append(m2_expr.ExprAff(meip, dst_o)) - e.append(m2_expr.ExprAff(ir.IRDst, dst_o)) + e.append(m2_expr.ExprAssign(meip, dst_o)) + e.append(m2_expr.ExprAssign(ir.IRDst, dst_o)) return e, [] # XXX size to do; eflag @@ -1716,10 +1716,10 @@ def div(ir, instr, src1): # if 8 bit div, only ax is affected if size == 8: - e.append(m2_expr.ExprAff(src2, m2_expr.ExprCompose(c_d[:8], c_r[:8]))) + e.append(m2_expr.ExprAssign(src2, m2_expr.ExprCompose(c_d[:8], c_r[:8]))) else: - e.append(m2_expr.ExprAff(s1, c_r[:size])) - e.append(m2_expr.ExprAff(s2, c_d[:size])) + e.append(m2_expr.ExprAssign(s1, c_r[:size])) + e.append(m2_expr.ExprAssign(s2, c_d[:size])) loc_div, loc_div_expr = ir.gen_loc_key_and_expr(ir.IRDst.size) loc_except, loc_except_expr = ir.gen_loc_key_and_expr(ir.IRDst.size) @@ -1728,17 +1728,17 @@ def div(ir, instr, src1): do_div = [] do_div += e - do_div.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + do_div.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) blk_div = IRBlock(loc_div, [AssignBlock(do_div, instr)]) do_except = [] - do_except.append(m2_expr.ExprAff(exception_flags, m2_expr.ExprInt( + do_except.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt( EXCEPT_DIV_BY_ZERO, exception_flags.size))) - do_except.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + do_except.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) blk_except = IRBlock(loc_except, [AssignBlock(do_except, instr)]) e = [] - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(src1, loc_div_expr, loc_except_expr))) return e, [blk_div, blk_except] @@ -1763,10 +1763,10 @@ def idiv(ir, instr, src1): # if 8 bit div, only ax is affected if size == 8: - e.append(m2_expr.ExprAff(src2, m2_expr.ExprCompose(c_d[:8], c_r[:8]))) + e.append(m2_expr.ExprAssign(src2, m2_expr.ExprCompose(c_d[:8], c_r[:8]))) else: - e.append(m2_expr.ExprAff(s1, c_r[:size])) - e.append(m2_expr.ExprAff(s2, c_d[:size])) + e.append(m2_expr.ExprAssign(s1, c_r[:size])) + e.append(m2_expr.ExprAssign(s2, c_d[:size])) loc_div, loc_div_expr = ir.gen_loc_key_and_expr(ir.IRDst.size) loc_except, loc_except_expr = ir.gen_loc_key_and_expr(ir.IRDst.size) @@ -1775,17 +1775,17 @@ def idiv(ir, instr, src1): do_div = [] do_div += e - do_div.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + do_div.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) blk_div = IRBlock(loc_div, [AssignBlock(do_div, instr)]) do_except = [] - do_except.append(m2_expr.ExprAff(exception_flags, m2_expr.ExprInt( + do_except.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt( EXCEPT_DIV_BY_ZERO, exception_flags.size))) - do_except.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + do_except.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) blk_except = IRBlock(loc_except, [AssignBlock(do_except, instr)]) e = [] - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(src1, loc_div_expr, loc_except_expr))) return e, [blk_div, blk_except] @@ -1801,21 +1801,21 @@ def mul(_, instr, src1): result = m2_expr.ExprOp('*', mRAX[size].zeroExtend(size * 2), src1.zeroExtend(size * 2)) - e.append(m2_expr.ExprAff(mRAX[size], result[:size])) - e.append(m2_expr.ExprAff(mRDX[size], result[size:size * 2])) + e.append(m2_expr.ExprAssign(mRAX[size], result[:size])) + e.append(m2_expr.ExprAssign(mRDX[size], result[size:size * 2])) elif src1.size == 8: result = m2_expr.ExprOp('*', mRAX[instr.mode][:8].zeroExtend(16), src1.zeroExtend(16)) - e.append(m2_expr.ExprAff(mRAX[instr.mode][:16], result)) + e.append(m2_expr.ExprAssign(mRAX[instr.mode][:16], result)) else: raise ValueError('unknow size') - e.append(m2_expr.ExprAff(of, m2_expr.ExprCond(result[size:size * 2], + e.append(m2_expr.ExprAssign(of, m2_expr.ExprCond(result[size:size * 2], m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)))) - e.append(m2_expr.ExprAff(cf, m2_expr.ExprCond(result[size:size * 2], + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprCond(result[size:size * 2], m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)))) @@ -1830,23 +1830,23 @@ def imul(_, instr, src1, src2=None, src3=None): result = m2_expr.ExprOp('*', mRAX[size].signExtend(size * 2), src1.signExtend(size * 2)) - e.append(m2_expr.ExprAff(mRAX[size], result[:size])) - e.append(m2_expr.ExprAff(mRDX[size], result[size:size * 2])) + e.append(m2_expr.ExprAssign(mRAX[size], result[:size])) + e.append(m2_expr.ExprAssign(mRDX[size], result[size:size * 2])) elif size == 8: dst = mRAX[instr.mode][:16] result = m2_expr.ExprOp('*', mRAX[instr.mode][:8].signExtend(16), src1.signExtend(16)) - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) value = m2_expr.ExprCond(result - result[:size].signExtend(size * 2), m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)) - e.append(m2_expr.ExprAff(cf, value)) + e.append(m2_expr.ExprAssign(cf, value)) value = m2_expr.ExprCond(result - result[:size].signExtend(size * 2), m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)) - e.append(m2_expr.ExprAff(of, value)) + e.append(m2_expr.ExprAssign(of, value)) else: if src3 is None: @@ -1855,16 +1855,16 @@ def imul(_, instr, src1, src2=None, src3=None): result = m2_expr.ExprOp('*', src2.signExtend(size * 2), src3.signExtend(size * 2)) - e.append(m2_expr.ExprAff(src1, result[:size])) + e.append(m2_expr.ExprAssign(src1, result[:size])) value = m2_expr.ExprCond(result - result[:size].signExtend(size * 2), m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)) - e.append(m2_expr.ExprAff(cf, value)) + e.append(m2_expr.ExprAssign(cf, value)) value = m2_expr.ExprCond(result - result[:size].signExtend(size * 2), m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)) - e.append(m2_expr.ExprAff(of, value)) + e.append(m2_expr.ExprAssign(of, value)) return e, [] @@ -1873,7 +1873,7 @@ def cbw(_, instr): e = [] tempAL = mRAX[instr.v_opmode()][:8] tempAX = mRAX[instr.v_opmode()][:16] - e.append(m2_expr.ExprAff(tempAX, tempAL.signExtend(16))) + e.append(m2_expr.ExprAssign(tempAX, tempAL.signExtend(16))) return e, [] @@ -1882,7 +1882,7 @@ def cwde(_, instr): e = [] tempAX = mRAX[instr.v_opmode()][:16] tempEAX = mRAX[instr.v_opmode()][:32] - e.append(m2_expr.ExprAff(tempEAX, tempAX.signExtend(32))) + e.append(m2_expr.ExprAssign(tempEAX, tempAX.signExtend(32))) return e, [] @@ -1891,7 +1891,7 @@ def cdqe(_, instr): e = [] tempEAX = mRAX[instr.mode][:32] tempRAX = mRAX[instr.mode][:64] - e.append(m2_expr.ExprAff(tempRAX, tempEAX.signExtend(64))) + e.append(m2_expr.ExprAssign(tempRAX, tempEAX.signExtend(64))) return e, [] @@ -1901,8 +1901,8 @@ def cwd(_, instr): tempAX = mRAX[instr.mode][:16] tempDX = mRDX[instr.mode][:16] result = tempAX.signExtend(32) - e.append(m2_expr.ExprAff(tempAX, result[:16])) - e.append(m2_expr.ExprAff(tempDX, result[16:32])) + e.append(m2_expr.ExprAssign(tempAX, result[:16])) + e.append(m2_expr.ExprAssign(tempDX, result[16:32])) return e, [] @@ -1912,7 +1912,7 @@ def cdq(_, instr): tempEAX = mRAX[instr.v_opmode()] tempEDX = mRDX[instr.v_opmode()] result = tempEAX.signExtend(64) - e.append(m2_expr.ExprAff(tempEDX, result[32:64])) + e.append(m2_expr.ExprAssign(tempEDX, result[32:64])) return e, [] @@ -1922,8 +1922,8 @@ def cqo(_, instr): tempRAX = mRAX[instr.mode][:64] tempRDX = mRDX[instr.mode][:64] result = tempRAX.signExtend(128) - e.append(m2_expr.ExprAff(tempRAX, result[:64])) - e.append(m2_expr.ExprAff(tempRDX, result[64:128])) + e.append(m2_expr.ExprAssign(tempRAX, result[:64])) + e.append(m2_expr.ExprAssign(tempRDX, result[64:128])) return e, [] @@ -1946,18 +1946,18 @@ def stos(ir, instr, size): b = mRAX[instr.mode][:size] e0 = [] - e0.append(m2_expr.ExprAff(addr_o, addr_p)) - e0.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e0.append(m2_expr.ExprAssign(addr_o, addr_p)) + e0.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e0 = IRBlock(loc_df_0, [AssignBlock(e0, instr)]) e1 = [] - e1.append(m2_expr.ExprAff(addr_o, addr_m)) - e1.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e1.append(m2_expr.ExprAssign(addr_o, addr_m)) + e1.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e1 = IRBlock(loc_df_1, [AssignBlock(e1, instr)]) e = [] - e.append(m2_expr.ExprAff(ir.ExprMem(addr, size), b)) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.ExprMem(addr, size), b)) + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(df, loc_df_1_expr, loc_df_0_expr))) return e, [e0, e1] @@ -1982,23 +1982,23 @@ def lods(ir, instr, size): b = mRAX[instr.mode][:size] e0 = [] - e0.append(m2_expr.ExprAff(addr_o, addr_p)) - e0.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e0.append(m2_expr.ExprAssign(addr_o, addr_p)) + e0.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e0 = IRBlock(loc_df_0, [AssignBlock(e0, instr)]) e1 = [] - e1.append(m2_expr.ExprAff(addr_o, addr_m)) - e1.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e1.append(m2_expr.ExprAssign(addr_o, addr_m)) + e1.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e1 = IRBlock(loc_df_1, [AssignBlock(e1, instr)]) e = [] if instr.mode == 64 and b.size == 32: - e.append(m2_expr.ExprAff(mRAX[instr.mode], + e.append(m2_expr.ExprAssign(mRAX[instr.mode], ir.ExprMem(addr, size).zeroExtend(64))) else: - e.append(m2_expr.ExprAff(b, ir.ExprMem(addr, size))) + e.append(m2_expr.ExprAssign(b, ir.ExprMem(addr, size))) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(df, loc_df_1_expr, loc_df_0_expr))) return e, [e0, e1] @@ -2024,22 +2024,22 @@ def movs(ir, instr, size): offset = m2_expr.ExprInt(size / 8, src.size) - e.append(m2_expr.ExprAff(ir.ExprMem(dst_sgm, size), + e.append(m2_expr.ExprAssign(ir.ExprMem(dst_sgm, size), ir.ExprMem(src_sgm, size))) e0 = [] - e0.append(m2_expr.ExprAff(src, src + offset)) - e0.append(m2_expr.ExprAff(dst, dst + offset)) - e0.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e0.append(m2_expr.ExprAssign(src, src + offset)) + e0.append(m2_expr.ExprAssign(dst, dst + offset)) + e0.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e0 = IRBlock(loc_df_0, [AssignBlock(e0, instr)]) e1 = [] - e1.append(m2_expr.ExprAff(src, src - offset)) - e1.append(m2_expr.ExprAff(dst, dst - offset)) - e1.append(m2_expr.ExprAff(ir.IRDst, loc_next_expr)) + e1.append(m2_expr.ExprAssign(src, src - offset)) + e1.append(m2_expr.ExprAssign(dst, dst - offset)) + e1.append(m2_expr.ExprAssign(ir.IRDst, loc_next_expr)) e1 = IRBlock(loc_df_1, [AssignBlock(e1, instr)]) - e.append(m2_expr.ExprAff(ir.IRDst, + e.append(m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(df, loc_df_1_expr, loc_df_0_expr))) return e, [e0, e1] @@ -2056,7 +2056,7 @@ def movsd(_, instr, dst, src): src = m2_expr.ExprMem(src.arg, 64) # Erase dst high bits src = src.zeroExtend(dst.size) - return [m2_expr.ExprAff(dst, src)], [] + return [m2_expr.ExprAssign(dst, src)], [] def movsd_dispatch(ir, instr, dst=None, src=None): @@ -2087,14 +2087,14 @@ def float_pop(avoid_flt=None, popcount=1): e = [] for i in xrange(8 - popcount): if avoid_flt != float_list[i]: - e.append(m2_expr.ExprAff(float_list[i], + e.append(m2_expr.ExprAssign(float_list[i], float_list[i + popcount])) fill_value = m2_expr.ExprOp("sint_to_fp", m2_expr.ExprInt(0, 64)) for i in xrange(8 - popcount, 8): - e.append(m2_expr.ExprAff(float_list[i], + e.append(m2_expr.ExprAssign(float_list[i], fill_value)) e.append( - m2_expr.ExprAff(float_stack_ptr, + m2_expr.ExprAssign(float_stack_ptr, float_stack_ptr - m2_expr.ExprInt(popcount, 3))) return e @@ -2111,10 +2111,10 @@ def fcom(_, instr, dst=None, src=None): e = [] - e.append(m2_expr.ExprAff(float_c0, m2_expr.ExprOp('fcom_c0', dst, src))) - e.append(m2_expr.ExprAff(float_c1, m2_expr.ExprOp('fcom_c1', dst, src))) - e.append(m2_expr.ExprAff(float_c2, m2_expr.ExprOp('fcom_c2', dst, src))) - e.append(m2_expr.ExprAff(float_c3, m2_expr.ExprOp('fcom_c3', dst, src))) + e.append(m2_expr.ExprAssign(float_c0, m2_expr.ExprOp('fcom_c0', dst, src))) + e.append(m2_expr.ExprAssign(float_c1, m2_expr.ExprOp('fcom_c1', dst, src))) + e.append(m2_expr.ExprAssign(float_c2, m2_expr.ExprOp('fcom_c2', dst, src))) + e.append(m2_expr.ExprAssign(float_c3, m2_expr.ExprOp('fcom_c3', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2125,10 +2125,10 @@ def ftst(_, instr): e = [] src = m2_expr.ExprOp('sint_to_fp', m2_expr.ExprInt(0, 64)) - e.append(m2_expr.ExprAff(float_c0, m2_expr.ExprOp('fcom_c0', dst, src))) - e.append(m2_expr.ExprAff(float_c1, m2_expr.ExprOp('fcom_c1', dst, src))) - e.append(m2_expr.ExprAff(float_c2, m2_expr.ExprOp('fcom_c2', dst, src))) - e.append(m2_expr.ExprAff(float_c3, m2_expr.ExprOp('fcom_c3', dst, src))) + e.append(m2_expr.ExprAssign(float_c0, m2_expr.ExprOp('fcom_c0', dst, src))) + e.append(m2_expr.ExprAssign(float_c1, m2_expr.ExprOp('fcom_c1', dst, src))) + e.append(m2_expr.ExprAssign(float_c2, m2_expr.ExprOp('fcom_c2', dst, src))) + e.append(m2_expr.ExprAssign(float_c3, m2_expr.ExprOp('fcom_c3', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2188,8 +2188,8 @@ def fxam(ir, instr): ) ) ) - base = [m2_expr.ExprAff(ir.IRDst, irdst), - m2_expr.ExprAff(float_c1, dst.msb()) + base = [m2_expr.ExprAssign(ir.IRDst, irdst), + m2_expr.ExprAssign(float_c1, dst.msb()) ] base += set_float_cs_eip(instr) @@ -2234,16 +2234,16 @@ def ficom(_, instr, dst, src=None): e = [] - e.append(m2_expr.ExprAff(float_c0, + e.append(m2_expr.ExprAssign(float_c0, m2_expr.ExprOp('fcom_c0', dst, src.zeroExtend(dst.size)))) - e.append(m2_expr.ExprAff(float_c1, + e.append(m2_expr.ExprAssign(float_c1, m2_expr.ExprOp('fcom_c1', dst, src.zeroExtend(dst.size)))) - e.append(m2_expr.ExprAff(float_c2, + e.append(m2_expr.ExprAssign(float_c2, m2_expr.ExprOp('fcom_c2', dst, src.zeroExtend(dst.size)))) - e.append(m2_expr.ExprAff(float_c3, + e.append(m2_expr.ExprAssign(float_c3, m2_expr.ExprOp('fcom_c3', dst, src.zeroExtend(dst.size)))) @@ -2261,13 +2261,13 @@ def fcomi(_, instr, dst=None, src=None): e = [] - e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp('fcom_c0', dst, src))) - e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp('fcom_c2', dst, src))) - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('fcom_c3', dst, src))) + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprOp('fcom_c0', dst, src))) + e.append(m2_expr.ExprAssign(pf, m2_expr.ExprOp('fcom_c2', dst, src))) + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp('fcom_c3', dst, src))) - e.append(m2_expr.ExprAff(of, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(nf, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) e += set_float_cs_eip(instr) return e, [] @@ -2334,13 +2334,13 @@ def comiss(_, instr, dst, src): dst = m2_expr.ExprOp('sint_to_fp', dst[:32]) src = m2_expr.ExprOp('sint_to_fp', src[:32]) - e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp('fcom_c0', dst, src))) - e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp('fcom_c2', dst, src))) - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('fcom_c3', dst, src))) + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprOp('fcom_c0', dst, src))) + e.append(m2_expr.ExprAssign(pf, m2_expr.ExprOp('fcom_c2', dst, src))) + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp('fcom_c3', dst, src))) - e.append(m2_expr.ExprAff(of, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(nf, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) e += set_float_cs_eip(instr) return e, [] @@ -2354,13 +2354,13 @@ def comisd(_, instr, dst, src): dst = m2_expr.ExprOp('sint_to_fp', dst[:64]) src = m2_expr.ExprOp('sint_to_fp', src[:64]) - e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp('fcom_c0', dst, src))) - e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp('fcom_c2', dst, src))) - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('fcom_c3', dst, src))) + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprOp('fcom_c0', dst, src))) + e.append(m2_expr.ExprAssign(pf, m2_expr.ExprOp('fcom_c2', dst, src))) + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp('fcom_c3', dst, src))) - e.append(m2_expr.ExprAff(of, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(nf, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) e += set_float_cs_eip(instr) return e, [] @@ -2374,16 +2374,16 @@ def fld(_, instr, src): raise NotImplementedError('convert from 80bits') e = [] - e.append(m2_expr.ExprAff(float_st7, float_st6)) - e.append(m2_expr.ExprAff(float_st6, float_st5)) - e.append(m2_expr.ExprAff(float_st5, float_st4)) - e.append(m2_expr.ExprAff(float_st4, float_st3)) - e.append(m2_expr.ExprAff(float_st3, float_st2)) - e.append(m2_expr.ExprAff(float_st2, float_st1)) - e.append(m2_expr.ExprAff(float_st1, float_st0)) - e.append(m2_expr.ExprAff(float_st0, src)) + e.append(m2_expr.ExprAssign(float_st7, float_st6)) + e.append(m2_expr.ExprAssign(float_st6, float_st5)) + e.append(m2_expr.ExprAssign(float_st5, float_st4)) + e.append(m2_expr.ExprAssign(float_st4, float_st3)) + e.append(m2_expr.ExprAssign(float_st3, float_st2)) + e.append(m2_expr.ExprAssign(float_st2, float_st1)) + e.append(m2_expr.ExprAssign(float_st1, float_st0)) + e.append(m2_expr.ExprAssign(float_st0, src)) e.append( - m2_expr.ExprAff(float_stack_ptr, + m2_expr.ExprAssign(float_stack_ptr, float_stack_ptr + m2_expr.ExprInt(1, 3))) e += set_float_cs_eip(instr) @@ -2399,7 +2399,7 @@ def fst(_, instr, dst): if dst.size == 32: src = m2_expr.ExprOp("fpconvert_fp32", src) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) e += set_float_cs_eip(instr) return e, [] @@ -2414,13 +2414,13 @@ def fstp(ir, instr, dst): src = float_st0 if dst.size == 32: src = m2_expr.ExprOp("fpconvert_fp32", src) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) else: src = float_st0 if float_list.index(dst) > 1: # a = st0 -> st0 is dropped # a = st1 -> st0 = st0, useless - e.append(m2_expr.ExprAff(float_prev(dst), src)) + e.append(m2_expr.ExprAssign(float_prev(dst), src)) e += set_float_cs_eip(instr) e += float_pop(dst) @@ -2429,7 +2429,7 @@ def fstp(ir, instr, dst): def fist(_, instr, dst): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fp_to_sint%d' % dst.size, + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fp_to_sint%d' % dst.size, float_st0))) e += set_float_cs_eip(instr) @@ -2444,7 +2444,7 @@ def fistp(ir, instr, dst): def fisttp(_, instr, dst): e = [] - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst, m2_expr.ExprOp('fp_to_sint%d' % dst.size, m2_expr.ExprOp('fpround_towardszero', float_st0) @@ -2516,7 +2516,7 @@ def fadd(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fadd', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fadd', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2526,7 +2526,7 @@ def fiadd(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fiadd', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fiadd', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2535,7 +2535,7 @@ def fisub(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fisub', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fisub', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2544,7 +2544,7 @@ def fisubr(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fisub', src, dst))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fisub', src, dst))) e += set_float_cs_eip(instr) return e, [] @@ -2552,7 +2552,7 @@ def fisubr(_, instr, dst, src=None): def fpatan(_, instr): e = [] a = float_st1 - e.append(m2_expr.ExprAff(float_prev(a), + e.append(m2_expr.ExprAssign(float_prev(a), m2_expr.ExprOp('fpatan', float_st0, float_st1))) e += set_float_cs_eip(instr) e += float_pop(a) @@ -2562,14 +2562,14 @@ def fpatan(_, instr): def fprem(_, instr): e = [] e.append( - m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fprem', float_st0, float_st1))) + m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fprem', float_st0, float_st1))) # Remaining bits (ex: used in argument reduction in tan) quotient = m2_expr.ExprOp('fp_to_sint32', m2_expr.ExprOp('fpround_towardszero', m2_expr.ExprOp('fdiv', float_st0, float_st1))) - e += [m2_expr.ExprAff(float_c0, quotient[2:3]), - m2_expr.ExprAff(float_c3, quotient[1:2]), - m2_expr.ExprAff(float_c1, quotient[0:1]), + e += [m2_expr.ExprAssign(float_c0, quotient[2:3]), + m2_expr.ExprAssign(float_c3, quotient[1:2]), + m2_expr.ExprAssign(float_c1, quotient[0:1]), # Consider the reduction is always completed - m2_expr.ExprAff(float_c2, m2_expr.ExprInt(0, 1)), + m2_expr.ExprAssign(float_c2, m2_expr.ExprInt(0, 1)), ] e += set_float_cs_eip(instr) return e, [] @@ -2578,7 +2578,7 @@ def fprem(_, instr): def fprem1(_, instr): e = [] e.append( - m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fprem1', float_st0, float_st1))) + m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fprem1', float_st0, float_st1))) e += set_float_cs_eip(instr) return e, [] @@ -2587,7 +2587,7 @@ def faddp(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_prev(dst), m2_expr.ExprOp('fadd', dst, src))) + e.append(m2_expr.ExprAssign(float_prev(dst), m2_expr.ExprOp('fadd', dst, src))) e += set_float_cs_eip(instr) e += float_pop(dst) return e, [] @@ -2603,7 +2603,7 @@ def fyl2x(_, instr): e = [] a = float_st1 e.append( - m2_expr.ExprAff(float_prev(a), m2_expr.ExprOp('fyl2x', float_st0, float_st1))) + m2_expr.ExprAssign(float_prev(a), m2_expr.ExprOp('fyl2x', float_st0, float_st1))) e += set_float_cs_eip(instr) e += float_pop(a) return e, [] @@ -2622,22 +2622,22 @@ def fnstenv(ir, instr, dst): # This will truncate addresses size = min(32, s) ad = ir.ExprMem(dst.arg, size=16) - e.append(m2_expr.ExprAff(ad, float_control)) + e.append(m2_expr.ExprAssign(ad, float_control)) ad = ir.ExprMem(dst.arg + m2_expr.ExprInt(size / 8 * 1, dst.arg.size), size=16) - e.append(m2_expr.ExprAff(ad, status_word)) + e.append(m2_expr.ExprAssign(ad, status_word)) ad = ir.ExprMem(dst.arg + m2_expr.ExprInt(size / 8 * 3, dst.arg.size), size=size) - e.append(m2_expr.ExprAff(ad, float_eip[:size])) + e.append(m2_expr.ExprAssign(ad, float_eip[:size])) ad = ir.ExprMem(dst.arg + m2_expr.ExprInt(size / 8 * 4, dst.arg.size), size=16) - e.append(m2_expr.ExprAff(ad, float_cs)) + e.append(m2_expr.ExprAssign(ad, float_cs)) ad = ir.ExprMem(dst.arg + m2_expr.ExprInt(size / 8 * 5, dst.arg.size), size=size) - e.append(m2_expr.ExprAff(ad, float_address[:size])) + e.append(m2_expr.ExprAssign(ad, float_address[:size])) ad = ir.ExprMem(dst.arg + m2_expr.ExprInt(size / 8 * 6, dst.arg.size), size=16) - e.append(m2_expr.ExprAff(ad, float_ds)) + e.append(m2_expr.ExprAssign(ad, float_ds)) return e, [] @@ -2652,12 +2652,12 @@ def fldenv(ir, instr, src): # Float control ad = ir.ExprMem(src.arg, size=16) - e.append(m2_expr.ExprAff(float_control, ad)) + e.append(m2_expr.ExprAssign(float_control, ad)) # Status word ad = ir.ExprMem(src.arg + m2_expr.ExprInt(size / 8 * 1, size=src.arg.size), size=16) - e += [m2_expr.ExprAff(x, y) for x, y in ((float_c0, ad[8:9]), + e += [m2_expr.ExprAssign(x, y) for x, y in ((float_c0, ad[8:9]), (float_c1, ad[9:10]), (float_c2, ad[10:11]), (float_stack_ptr, ad[11:14]), @@ -2672,7 +2672,7 @@ def fldenv(ir, instr, src): ad = ir.ExprMem(src.arg + m2_expr.ExprInt(size / 8 * offset, size=src.arg.size), size=target.size) - e.append(m2_expr.ExprAff(target, ad)) + e.append(m2_expr.ExprAssign(target, ad)) return e, [] @@ -2681,7 +2681,7 @@ def fsub(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fsub', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fsub', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2690,7 +2690,7 @@ def fsubp(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_prev(dst), m2_expr.ExprOp('fsub', dst, src))) + e.append(m2_expr.ExprAssign(float_prev(dst), m2_expr.ExprOp('fsub', dst, src))) e += set_float_cs_eip(instr) e += float_pop(dst) return e, [] @@ -2700,7 +2700,7 @@ def fsubr(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fsub', src, dst))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fsub', src, dst))) e += set_float_cs_eip(instr) return e, [] @@ -2709,7 +2709,7 @@ def fsubrp(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_prev(dst), m2_expr.ExprOp('fsub', src, dst))) + e.append(m2_expr.ExprAssign(float_prev(dst), m2_expr.ExprOp('fsub', src, dst))) e += set_float_cs_eip(instr) e += float_pop(dst) return e, [] @@ -2719,7 +2719,7 @@ def fmul(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fmul', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fmul', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2728,7 +2728,7 @@ def fimul(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fimul', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fimul', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2737,7 +2737,7 @@ def fdiv(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fdiv', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fdiv', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2746,7 +2746,7 @@ def fdivr(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fdiv', src, dst))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fdiv', src, dst))) e += set_float_cs_eip(instr) return e, [] @@ -2755,7 +2755,7 @@ def fdivrp(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_prev(dst), m2_expr.ExprOp('fdiv', src, dst))) + e.append(m2_expr.ExprAssign(float_prev(dst), m2_expr.ExprOp('fdiv', src, dst))) e += set_float_cs_eip(instr) e += float_pop(dst) return e, [] @@ -2765,7 +2765,7 @@ def fidiv(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fidiv', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fidiv', dst, src))) e += set_float_cs_eip(instr) return e, [] @@ -2774,7 +2774,7 @@ def fidivr(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('fidiv', src, dst))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('fidiv', src, dst))) e += set_float_cs_eip(instr) return e, [] @@ -2784,7 +2784,7 @@ def fdivp(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_prev(dst), m2_expr.ExprOp('fdiv', dst, src))) + e.append(m2_expr.ExprAssign(float_prev(dst), m2_expr.ExprOp('fdiv', dst, src))) e += set_float_cs_eip(instr) e += float_pop(dst) return e, [] @@ -2795,7 +2795,7 @@ def fmulp(_, instr, dst, src=None): dst, src = float_implicit_st0(dst, src) e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_prev(dst), m2_expr.ExprOp('fmul', dst, src))) + e.append(m2_expr.ExprAssign(float_prev(dst), m2_expr.ExprOp('fmul', dst, src))) e += set_float_cs_eip(instr) e += float_pop(dst) return e, [] @@ -2804,7 +2804,7 @@ def fmulp(_, instr, dst, src=None): def ftan(_, instr, src): e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('ftan', src))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('ftan', src))) e += set_float_cs_eip(instr) return e, [] @@ -2812,23 +2812,23 @@ def ftan(_, instr, src): def fxch(_, instr, src): e = [] src = mem2double(instr, src) - e.append(m2_expr.ExprAff(float_st0, src)) - e.append(m2_expr.ExprAff(src, float_st0)) + e.append(m2_expr.ExprAssign(float_st0, src)) + e.append(m2_expr.ExprAssign(src, float_st0)) e += set_float_cs_eip(instr) return e, [] def fptan(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st7, float_st6)) - e.append(m2_expr.ExprAff(float_st6, float_st5)) - e.append(m2_expr.ExprAff(float_st5, float_st4)) - e.append(m2_expr.ExprAff(float_st4, float_st3)) - e.append(m2_expr.ExprAff(float_st3, float_st2)) - e.append(m2_expr.ExprAff(float_st2, float_st1)) - e.append(m2_expr.ExprAff(float_st1, m2_expr.ExprOp('ftan', float_st0))) + e.append(m2_expr.ExprAssign(float_st7, float_st6)) + e.append(m2_expr.ExprAssign(float_st6, float_st5)) + e.append(m2_expr.ExprAssign(float_st5, float_st4)) + e.append(m2_expr.ExprAssign(float_st4, float_st3)) + e.append(m2_expr.ExprAssign(float_st3, float_st2)) + e.append(m2_expr.ExprAssign(float_st2, float_st1)) + e.append(m2_expr.ExprAssign(float_st1, m2_expr.ExprOp('ftan', float_st0))) e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( float_st0, m2_expr.ExprOp( 'sint_to_fp', @@ -2837,51 +2837,51 @@ def fptan(_, instr): ) ) e.append( - m2_expr.ExprAff(float_stack_ptr, + m2_expr.ExprAssign(float_stack_ptr, float_stack_ptr + m2_expr.ExprInt(1, 3))) return e, [] def frndint(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('frndint', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('frndint', float_st0))) e += set_float_cs_eip(instr) return e, [] def fsin(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fsin', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fsin', float_st0))) e += set_float_cs_eip(instr) return e, [] def fcos(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fcos', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fcos', float_st0))) e += set_float_cs_eip(instr) return e, [] def fsincos(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st7, float_st6)) - e.append(m2_expr.ExprAff(float_st6, float_st5)) - e.append(m2_expr.ExprAff(float_st5, float_st4)) - e.append(m2_expr.ExprAff(float_st4, float_st3)) - e.append(m2_expr.ExprAff(float_st3, float_st2)) - e.append(m2_expr.ExprAff(float_st2, float_st1)) - e.append(m2_expr.ExprAff(float_st1, m2_expr.ExprOp('fsin', float_st0))) - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fcos', float_st0))) + e.append(m2_expr.ExprAssign(float_st7, float_st6)) + e.append(m2_expr.ExprAssign(float_st6, float_st5)) + e.append(m2_expr.ExprAssign(float_st5, float_st4)) + e.append(m2_expr.ExprAssign(float_st4, float_st3)) + e.append(m2_expr.ExprAssign(float_st3, float_st2)) + e.append(m2_expr.ExprAssign(float_st2, float_st1)) + e.append(m2_expr.ExprAssign(float_st1, m2_expr.ExprOp('fsin', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fcos', float_st0))) e.append( - m2_expr.ExprAff(float_stack_ptr, + m2_expr.ExprAssign(float_stack_ptr, float_stack_ptr + m2_expr.ExprInt(1, 3))) return e, [] def fscale(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fscale', float_st0, + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fscale', float_st0, float_st1))) e += set_float_cs_eip(instr) return e, [] @@ -2889,28 +2889,28 @@ def fscale(_, instr): def f2xm1(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('f2xm1', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('f2xm1', float_st0))) e += set_float_cs_eip(instr) return e, [] def fchs(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fchs', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fchs', float_st0))) e += set_float_cs_eip(instr) return e, [] def fsqrt(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fsqrt', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fsqrt', float_st0))) e += set_float_cs_eip(instr) return e, [] def fabs(_, instr): e = [] - e.append(m2_expr.ExprAff(float_st0, m2_expr.ExprOp('fabs', float_st0))) + e.append(m2_expr.ExprAssign(float_st0, m2_expr.ExprOp('fabs', float_st0))) e += set_float_cs_eip(instr) return e, [] @@ -2926,19 +2926,19 @@ def fnstsw(_, instr, dst): float_c3, # B: FPU is not busy -> 0 m2_expr.ExprInt(0, 1)] - e = [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*args))] + e = [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*args))] return e, [] def fnstcw(_, instr, dst): e = [] - e.append(m2_expr.ExprAff(dst, float_control)) + e.append(m2_expr.ExprAssign(dst, float_control)) return e, [] def fldcw(_, instr, src): e = [] - e.append(m2_expr.ExprAff(float_control, src)) + e.append(m2_expr.ExprAssign(float_control, src)) return e, [] @@ -3030,7 +3030,7 @@ def sfence(_, instr, src=None): def ud2(_, instr, src=None): - e = [m2_expr.ExprAff(exception_flags, m2_expr.ExprInt( + e = [m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt( EXCEPT_ILLEGAL_INSN, exception_flags.size))] return e, [] @@ -3038,18 +3038,18 @@ def ud2(_, instr, src=None): def hlt(_, instr): e = [] except_int = EXCEPT_PRIV_INSN - e.append(m2_expr.ExprAff(exception_flags, m2_expr.ExprInt(except_int, 32))) + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(except_int, 32))) return e, [] def rdtsc(_, instr): e = [] - e.append(m2_expr.ExprAff(tsc1, tsc1 + m2_expr.ExprInt(1, 32))) - e.append(m2_expr.ExprAff(tsc2, tsc2 + m2_expr.ExprCond(tsc1 - tsc1.mask, + e.append(m2_expr.ExprAssign(tsc1, tsc1 + m2_expr.ExprInt(1, 32))) + e.append(m2_expr.ExprAssign(tsc2, tsc2 + m2_expr.ExprCond(tsc1 - tsc1.mask, m2_expr.ExprInt(0, 32), m2_expr.ExprInt(1, 32)))) - e.append(m2_expr.ExprAff(mRAX[32], tsc1)) - e.append(m2_expr.ExprAff(mRDX[32], tsc2)) + e.append(m2_expr.ExprAssign(mRAX[32], tsc1)) + e.append(m2_expr.ExprAssign(mRDX[32], tsc2)) return e, [] @@ -3058,7 +3058,7 @@ def daa(_, instr): r_al = mRAX[instr.mode][:8] cond1 = m2_expr.expr_is_unsigned_greater(r_al[:4], m2_expr.ExprInt(0x9, 4)) | af - e.append(m2_expr.ExprAff(af, cond1)) + e.append(m2_expr.ExprAssign(af, cond1)) cond2 = m2_expr.expr_is_unsigned_greater(m2_expr.ExprInt(6, 8), r_al) cond3 = m2_expr.expr_is_unsigned_greater(r_al, m2_expr.ExprInt(0x99, 8)) | cf @@ -3069,7 +3069,7 @@ def daa(_, instr): new_cf = m2_expr.ExprCond(cond3, m2_expr.ExprInt(1, 1), m2_expr.ExprInt(0, 1)) - e.append(m2_expr.ExprAff(cf, new_cf)) + e.append(m2_expr.ExprAssign(cf, new_cf)) al_c1 = m2_expr.ExprCond(cond1, r_al + m2_expr.ExprInt(6, 8), @@ -3078,7 +3078,7 @@ def daa(_, instr): new_al = m2_expr.ExprCond(cond3, al_c1 + m2_expr.ExprInt(0x60, 8), al_c1) - e.append(m2_expr.ExprAff(r_al, new_al)) + e.append(m2_expr.ExprAssign(r_al, new_al)) e += update_flag_znp(new_al) return e, [] @@ -3088,7 +3088,7 @@ def das(_, instr): r_al = mRAX[instr.mode][:8] cond1 = m2_expr.expr_is_unsigned_greater(r_al[:4], m2_expr.ExprInt(0x9, 4)) | af - e.append(m2_expr.ExprAff(af, cond1)) + e.append(m2_expr.ExprAssign(af, cond1)) cond2 = m2_expr.expr_is_unsigned_greater(m2_expr.ExprInt(6, 8), r_al) cond3 = m2_expr.expr_is_unsigned_greater(r_al, m2_expr.ExprInt(0x99, 8)) | cf @@ -3099,7 +3099,7 @@ def das(_, instr): new_cf = m2_expr.ExprCond(cond3, m2_expr.ExprInt(1, 1), cf_c1) - e.append(m2_expr.ExprAff(cf, new_cf)) + e.append(m2_expr.ExprAssign(cf, new_cf)) al_c1 = m2_expr.ExprCond(cond1, r_al - m2_expr.ExprInt(6, 8), @@ -3108,7 +3108,7 @@ def das(_, instr): new_al = m2_expr.ExprCond(cond3, al_c1 - m2_expr.ExprInt(0x60, 8), al_c1) - e.append(m2_expr.ExprAff(r_al, new_al)) + e.append(m2_expr.ExprAssign(r_al, new_al)) e += update_flag_znp(new_al) return e, [] @@ -3125,12 +3125,12 @@ def aam(ir, instr, src): m2_expr.ExprOp("udiv", tempAL, src), mRAX[instr.mode][16:] ) - e += [m2_expr.ExprAff(mRAX[instr.mode], newEAX)] + e += [m2_expr.ExprAssign(mRAX[instr.mode], newEAX)] e += update_flag_arith(newEAX) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) else: e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( exception_flags, m2_expr.ExprInt(EXCEPT_DIV_BY_ZERO, exception_flags.size) ) @@ -3145,9 +3145,9 @@ def aad(_, instr, src): newEAX = m2_expr.ExprCompose((tempAL + (tempAH * src)) & m2_expr.ExprInt(0xFF, 8), m2_expr.ExprInt(0, 8), mRAX[instr.mode][16:]) - e += [m2_expr.ExprAff(mRAX[instr.mode], newEAX)] + e += [m2_expr.ExprAssign(mRAX[instr.mode], newEAX)] e += update_flag_arith(newEAX) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) return e, [] @@ -3175,9 +3175,9 @@ def _tpl_aaa(_, instr, op): new_ax = first_part & m2_expr.ExprInt(0xff0f, size=r_ax.size) # set AL - e.append(m2_expr.ExprAff(r_ax, m2_expr.ExprCond(cond, new_ax, r_ax))) - e.append(m2_expr.ExprAff(af, cond)) - e.append(m2_expr.ExprAff(cf, cond)) + e.append(m2_expr.ExprAssign(r_ax, m2_expr.ExprCond(cond, new_ax, r_ax))) + e.append(m2_expr.ExprAssign(af, cond)) + e.append(m2_expr.ExprAssign(cf, cond)) return e, [] @@ -3203,18 +3203,18 @@ def bsr_bsf(ir, instr, dst, src, op_func): loc_next = ir.get_next_loc_key(instr) loc_next_expr = m2_expr.ExprLoc(loc_next, ir.IRDst.size) - aff_dst = m2_expr.ExprAff(ir.IRDst, loc_next_expr) - e = [m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(src, + aff_dst = m2_expr.ExprAssign(ir.IRDst, loc_next_expr) + e = [m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(src, loc_src_not_null_expr, loc_src_null_expr))] e_src_null = [] - e_src_null.append(m2_expr.ExprAff(zf, m2_expr.ExprInt(1, zf.size))) + e_src_null.append(m2_expr.ExprAssign(zf, m2_expr.ExprInt(1, zf.size))) # XXX destination is undefined e_src_null.append(aff_dst) e_src_not_null = [] - e_src_not_null.append(m2_expr.ExprAff(zf, m2_expr.ExprInt(0, zf.size))) - e_src_not_null.append(m2_expr.ExprAff(dst, op_func(src))) + e_src_not_null.append(m2_expr.ExprAssign(zf, m2_expr.ExprInt(0, zf.size))) + e_src_not_null.append(m2_expr.ExprAssign(dst, op_func(src))) e_src_not_null.append(aff_dst) return e, [IRBlock(loc_src_null, [AssignBlock(e_src_null, instr)]), @@ -3235,13 +3235,13 @@ def bsr(ir, instr, dst, src): def arpl(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(exception_flags, m2_expr.ExprInt(1 << 7, 32))) + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(1 << 7, 32))) return e, [] def ins(_, instr, size): e = [] - e.append(m2_expr.ExprAff(exception_flags, m2_expr.ExprInt(1 << 7, 32))) + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(1 << 7, 32))) return e, [] @@ -3251,17 +3251,17 @@ def sidt(ir, instr, dst): raise ValueError('not exprmem 32bit instance!!') ptr = dst.arg LOG_X86_SEM.warning("DEFAULT SIDT ADDRESS %s!!", str(dst)) - e.append(m2_expr.ExprAff(ir.ExprMem(ptr, 32), + e.append(m2_expr.ExprAssign(ir.ExprMem(ptr, 32), m2_expr.ExprInt(0xe40007ff, 32))) e.append( - m2_expr.ExprAff(ir.ExprMem(ptr + m2_expr.ExprInt(4, ptr.size), 16), + m2_expr.ExprAssign(ir.ExprMem(ptr + m2_expr.ExprInt(4, ptr.size), 16), m2_expr.ExprInt(0x8245, 16))) return e, [] def sldt(_, instr, dst): LOG_X86_SEM.warning("DEFAULT SLDT ADDRESS %s!!", str(dst)) - e = [m2_expr.ExprAff(dst, m2_expr.ExprInt(0, dst.size))] + e = [m2_expr.ExprAssign(dst, m2_expr.ExprInt(0, dst.size))] return e, [] @@ -3343,7 +3343,7 @@ def cmovns(ir, instr, dst, src): def icebp(_, instr): e = [] - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_SOFT_BP, 32))) return e, [] # XXX @@ -3356,22 +3356,22 @@ def l_int(_, instr, src): except_int = EXCEPT_SOFT_BP else: except_int = EXCEPT_INT_XX - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(except_int, 32))) - e.append(m2_expr.ExprAff(interrupt_num, src)) + e.append(m2_expr.ExprAssign(interrupt_num, src)) return e, [] def l_sysenter(_, instr): e = [] - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))) return e, [] def l_syscall(_, instr): e = [] - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))) return e, [] @@ -3380,7 +3380,7 @@ def l_syscall(_, instr): def l_out(_, instr, src1, src2): e = [] - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))) return e, [] @@ -3389,7 +3389,7 @@ def l_out(_, instr, src1, src2): def l_outs(_, instr, size): e = [] - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))) return e, [] @@ -3400,23 +3400,23 @@ def xlat(ir, instr): e = [] ptr = mRAX[instr.mode][0:8].zeroExtend(mRBX[instr.mode].size) src = ir.ExprMem(mRBX[instr.mode] + ptr, 8) - e.append(m2_expr.ExprAff(mRAX[instr.mode][0:8], src)) + e.append(m2_expr.ExprAssign(mRAX[instr.mode][0:8], src)) return e, [] def cpuid(_, instr): e = [] e.append( - m2_expr.ExprAff(mRAX[instr.mode], + m2_expr.ExprAssign(mRAX[instr.mode], m2_expr.ExprOp('x86_cpuid', mRAX[instr.mode], m2_expr.ExprInt(0, instr.mode)))) e.append( - m2_expr.ExprAff(mRBX[instr.mode], + m2_expr.ExprAssign(mRBX[instr.mode], m2_expr.ExprOp('x86_cpuid', mRAX[instr.mode], m2_expr.ExprInt(1, instr.mode)))) e.append( - m2_expr.ExprAff(mRCX[instr.mode], + m2_expr.ExprAssign(mRCX[instr.mode], m2_expr.ExprOp('x86_cpuid', mRAX[instr.mode], m2_expr.ExprInt(2, instr.mode)))) e.append( - m2_expr.ExprAff(mRDX[instr.mode], + m2_expr.ExprAssign(mRDX[instr.mode], m2_expr.ExprOp('x86_cpuid', mRAX[instr.mode], m2_expr.ExprInt(3, instr.mode)))) return e, [] @@ -3454,17 +3454,17 @@ def bt(ir, instr, src, index): index = index.zeroExtend(src.size) d, off_bit = bittest_get(ir, instr, src, index) d = d >> off_bit - e.append(m2_expr.ExprAff(cf, d[:1])) + e.append(m2_expr.ExprAssign(cf, d[:1])) return e, [] def btc(ir, instr, src, index): e = [] d, off_bit = bittest_get(ir, instr, src, index) - e.append(m2_expr.ExprAff(cf, (d >> off_bit)[:1])) + e.append(m2_expr.ExprAssign(cf, (d >> off_bit)[:1])) m = m2_expr.ExprInt(1, src.size) << off_bit - e.append(m2_expr.ExprAff(d, d ^ m)) + e.append(m2_expr.ExprAssign(d, d ^ m)) return e, [] @@ -3472,9 +3472,9 @@ def btc(ir, instr, src, index): def bts(ir, instr, src, index): e = [] d, off_bit = bittest_get(ir, instr, src, index) - e.append(m2_expr.ExprAff(cf, (d >> off_bit)[:1])) + e.append(m2_expr.ExprAssign(cf, (d >> off_bit)[:1])) m = m2_expr.ExprInt(1, src.size) << off_bit - e.append(m2_expr.ExprAff(d, d | m)) + e.append(m2_expr.ExprAssign(d, d | m)) return e, [] @@ -3482,9 +3482,9 @@ def bts(ir, instr, src, index): def btr(ir, instr, src, index): e = [] d, off_bit = bittest_get(ir, instr, src, index) - e.append(m2_expr.ExprAff(cf, (d >> off_bit)[:1])) + e.append(m2_expr.ExprAssign(cf, (d >> off_bit)[:1])) m = ~(m2_expr.ExprInt(1, src.size) << off_bit) - e.append(m2_expr.ExprAff(d, d & m)) + e.append(m2_expr.ExprAssign(d, d & m)) return e, [] @@ -3495,7 +3495,7 @@ def into(_, instr): def l_in(_, instr, src1, src2): e = [] - e.append(m2_expr.ExprAff(exception_flags, + e.append(m2_expr.ExprAssign(exception_flags, m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))) return e, [] @@ -3537,46 +3537,46 @@ def cmpxchg16b(arg1): def lds(ir, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, ir.ExprMem(src.arg, size=dst.size))) + e.append(m2_expr.ExprAssign(dst, ir.ExprMem(src.arg, size=dst.size))) DS_value = ir.ExprMem(src.arg + m2_expr.ExprInt(dst.size / 8, src.arg.size), size=16) - e.append(m2_expr.ExprAff(DS, DS_value)) + e.append(m2_expr.ExprAssign(DS, DS_value)) return e, [] def les(ir, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, ir.ExprMem(src.arg, size=dst.size))) + e.append(m2_expr.ExprAssign(dst, ir.ExprMem(src.arg, size=dst.size))) ES_value = ir.ExprMem(src.arg + m2_expr.ExprInt(dst.size / 8, src.arg.size), size=16) - e.append(m2_expr.ExprAff(ES, ES_value)) + e.append(m2_expr.ExprAssign(ES, ES_value)) return e, [] def lss(ir, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, ir.ExprMem(src.arg, size=dst.size))) + e.append(m2_expr.ExprAssign(dst, ir.ExprMem(src.arg, size=dst.size))) SS_value = ir.ExprMem(src.arg + m2_expr.ExprInt(dst.size / 8, src.arg.size), size=16) - e.append(m2_expr.ExprAff(SS, SS_value)) + e.append(m2_expr.ExprAssign(SS, SS_value)) return e, [] def lfs(ir, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, ir.ExprMem(src.arg, size=dst.size))) + e.append(m2_expr.ExprAssign(dst, ir.ExprMem(src.arg, size=dst.size))) FS_value = ir.ExprMem(src.arg + m2_expr.ExprInt(dst.size / 8, src.arg.size), size=16) - e.append(m2_expr.ExprAff(FS, FS_value)) + e.append(m2_expr.ExprAssign(FS, FS_value)) return e, [] def lgs(ir, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, ir.ExprMem(src.arg, size=dst.size))) + e.append(m2_expr.ExprAssign(dst, ir.ExprMem(src.arg, size=dst.size))) GS_value = ir.ExprMem(src.arg + m2_expr.ExprInt(dst.size / 8, src.arg.size), size=16) - e.append(m2_expr.ExprAff(GS, GS_value)) + e.append(m2_expr.ExprAssign(GS, GS_value)) return e, [] @@ -3585,32 +3585,32 @@ def lahf(_, instr): args = [cf, m2_expr.ExprInt(1, 1), pf, m2_expr.ExprInt(0, 1), af, m2_expr.ExprInt(0, 1), zf, nf] e.append( - m2_expr.ExprAff(mRAX[instr.mode][8:16], m2_expr.ExprCompose(*args))) + m2_expr.ExprAssign(mRAX[instr.mode][8:16], m2_expr.ExprCompose(*args))) return e, [] def sahf(_, instr): tmp = mRAX[instr.mode][8:16] e = [] - e.append(m2_expr.ExprAff(cf, tmp[0:1])) - e.append(m2_expr.ExprAff(pf, tmp[2:3])) - e.append(m2_expr.ExprAff(af, tmp[4:5])) - e.append(m2_expr.ExprAff(zf, tmp[6:7])) - e.append(m2_expr.ExprAff(nf, tmp[7:8])) + e.append(m2_expr.ExprAssign(cf, tmp[0:1])) + e.append(m2_expr.ExprAssign(pf, tmp[2:3])) + e.append(m2_expr.ExprAssign(af, tmp[4:5])) + e.append(m2_expr.ExprAssign(zf, tmp[6:7])) + e.append(m2_expr.ExprAssign(nf, tmp[7:8])) return e, [] def lar(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('access_segment', src))) - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('access_segment_ok', src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('access_segment', src))) + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp('access_segment_ok', src))) return e, [] def lsl(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('load_segment_limit', src))) - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp('load_segment_limit_ok', src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('load_segment_limit', src))) + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp('load_segment_limit_ok', src))) return e, [] @@ -3626,7 +3626,7 @@ def fnclex(_, instr): def l_str(_, instr, dst): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('load_tr_segment_selector', + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('load_tr_segment_selector', m2_expr.ExprInt(0, 32)))) return e, [] @@ -3634,57 +3634,57 @@ def l_str(_, instr, dst): def movd(_, instr, dst, src): e = [] if dst in regs_mm_expr: - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst, m2_expr.ExprCompose(src, m2_expr.ExprInt(0, 32)))) elif dst in regs_xmm_expr: - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst, m2_expr.ExprCompose(src, m2_expr.ExprInt(0, 96)))) else: - e.append(m2_expr.ExprAff(dst, src[:32])) + e.append(m2_expr.ExprAssign(dst, src[:32])) return e, [] def movdqu(_, instr, dst, src): # XXX TODO alignement check - return [m2_expr.ExprAff(dst, src)], [] + return [m2_expr.ExprAssign(dst, src)], [] def movapd(_, instr, dst, src): # XXX TODO alignement check - return [m2_expr.ExprAff(dst, src)], [] + return [m2_expr.ExprAssign(dst, src)], [] def andps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('&', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('&', dst, src))) return e, [] def andnps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('&', dst ^ dst.mask, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('&', dst ^ dst.mask, src))) return e, [] def orps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('|', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('|', dst, src))) return e, [] def xorps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, m2_expr.ExprOp('^', dst, src))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprOp('^', dst, src))) return e, [] def rdmsr(ir, instr): - e = [m2_expr.ExprAff(exception_flags,m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))] + e = [m2_expr.ExprAssign(exception_flags,m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))] return e, [] def wrmsr(ir, instr): - e = [m2_expr.ExprAff(exception_flags,m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))] + e = [m2_expr.ExprAssign(exception_flags,m2_expr.ExprInt(EXCEPT_PRIV_INSN, 32))] return e, [] # MMX/SSE/AVX operations @@ -3703,7 +3703,7 @@ def vec_op_clip(op, size, callback=None): result = m2_expr.ExprOp(op, dst[:size], src[:size]) if callback is not None: result = callback(result) - return [m2_expr.ExprAff(dst[:size], result)], [] + return [m2_expr.ExprAssign(dst[:size], result)], [] return vec_op_clip_instr # Generic vertical operation @@ -3734,7 +3734,7 @@ def __vec_vertical_instr_gen(op, elt_size, sem, apply_on_output): if isinstance(src, m2_expr.ExprMem): src = ir.ExprMem(src.arg, dst.size) reg_size = dst.size - e.append(m2_expr.ExprAff(dst, sem(op, elt_size, reg_size, dst, src, + e.append(m2_expr.ExprAssign(dst, sem(op, elt_size, reg_size, dst, src, apply_on_output))) return e, [] return vec_instr @@ -3839,16 +3839,16 @@ pmulhq = vec_vertical_instr('*', 64, lambda x: _keep_mul_high(x, signed=True)) def pmuludq(ir, instr, dst, src): e = [] if dst.size == 64: - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst, src[:32].zeroExtend(64) * dst[:32].zeroExtend(64) )) elif dst.size == 128: - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst[:64], src[:32].zeroExtend(64) * dst[:32].zeroExtend(64) )) - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst[64:], src[64:96].zeroExtend(64) * dst[64:96].zeroExtend(64) )) @@ -3870,7 +3870,7 @@ def pmaddwd(ir, instr, dst, src): base += sizesrc mul2 = src[base: base + sizesrc].signExtend(sizedst) * dst[base: base + sizesrc].signExtend(sizedst) out.append(mul1 + mul2) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def _absolute(expr): @@ -3895,7 +3895,7 @@ def psadbw(ir, instr, dst, src): out_dst.append(m2_expr.ExprOp("+", *out)) out_dst.append(m2_expr.ExprInt(0, 64 - sizedst)) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out_dst))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out_dst))], [] def _average(expr): assert expr.is_op("avg") and len(expr.args) == 2 @@ -4031,7 +4031,7 @@ def pand(_, instr, dst, src): e = [] result = dst & src # No flag affected - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] @@ -4039,21 +4039,21 @@ def pandn(_, instr, dst, src): e = [] result = (dst ^ dst.mask) & src # No flag affected - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] def por(_, instr, dst, src): e = [] result = dst | src - e.append(m2_expr.ExprAff(dst, result)) + e.append(m2_expr.ExprAssign(dst, result)) return e, [] def cvtdq2pd(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst[:64], m2_expr.ExprOp( 'sint_to_fp', @@ -4062,7 +4062,7 @@ def cvtdq2pd(_, instr, dst, src): ) ) e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst[64:128], m2_expr.ExprOp( 'sint_to_fp', @@ -4076,49 +4076,49 @@ def cvtdq2pd(_, instr, dst, src): def cvtdq2ps(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('sint_to_fp', src[:32]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('sint_to_fp', src[:32]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('sint_to_fp', src[32:64]))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('sint_to_fp', src[32:64]))) e.append( - m2_expr.ExprAff(dst[64:96], m2_expr.ExprOp('sint_to_fp', src[64:96]))) + m2_expr.ExprAssign(dst[64:96], m2_expr.ExprOp('sint_to_fp', src[64:96]))) e.append( - m2_expr.ExprAff(dst[96:128], m2_expr.ExprOp('sint_to_fp', src[96:128]))) + m2_expr.ExprAssign(dst[96:128], m2_expr.ExprOp('sint_to_fp', src[96:128]))) return e, [] def cvtpd2dq(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:64]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:64]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[64:128]))) - e.append(m2_expr.ExprAff(dst[64:128], m2_expr.ExprInt(0, 64))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[64:128]))) + e.append(m2_expr.ExprAssign(dst[64:128], m2_expr.ExprInt(0, 64))) return e, [] def cvtpd2pi(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:64]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:64]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[64:128]))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[64:128]))) return e, [] def cvtpd2ps(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fpconvert_fp32', src[:64]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fpconvert_fp32', src[:64]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('fpconvert_fp32', src[64:128]))) - e.append(m2_expr.ExprAff(dst[64:128], m2_expr.ExprInt(0, 64))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('fpconvert_fp32', src[64:128]))) + e.append(m2_expr.ExprAssign(dst[64:128], m2_expr.ExprInt(0, 64))) return e, [] def cvtpi2pd(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst[:64], m2_expr.ExprOp( 'sint_to_fp', @@ -4127,7 +4127,7 @@ def cvtpi2pd(_, instr, dst, src): ) ) e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst[64:128], m2_expr.ExprOp( 'sint_to_fp', @@ -4140,61 +4140,61 @@ def cvtpi2pd(_, instr, dst, src): def cvtpi2ps(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('sint_to_fp', src[:32]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('sint_to_fp', src[:32]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('sint_to_fp', src[32:64]))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('sint_to_fp', src[32:64]))) return e, [] def cvtps2dq(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:32]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:32]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[32:64]))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[32:64]))) e.append( - m2_expr.ExprAff(dst[64:96], m2_expr.ExprOp('fp_to_sint32', src[64:96]))) + m2_expr.ExprAssign(dst[64:96], m2_expr.ExprOp('fp_to_sint32', src[64:96]))) e.append( - m2_expr.ExprAff(dst[96:128], m2_expr.ExprOp('fp_to_sint32', src[96:128]))) + m2_expr.ExprAssign(dst[96:128], m2_expr.ExprOp('fp_to_sint32', src[96:128]))) return e, [] def cvtps2pd(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:64], m2_expr.ExprOp('fpconvert_fp64', src[:32]))) + m2_expr.ExprAssign(dst[:64], m2_expr.ExprOp('fpconvert_fp64', src[:32]))) e.append( - m2_expr.ExprAff(dst[64:128], m2_expr.ExprOp('fpconvert_fp64', src[32:64]))) + m2_expr.ExprAssign(dst[64:128], m2_expr.ExprOp('fpconvert_fp64', src[32:64]))) return e, [] def cvtps2pi(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:32]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:32]))) e.append( - m2_expr.ExprAff(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[32:64]))) + m2_expr.ExprAssign(dst[32:64], m2_expr.ExprOp('fp_to_sint32', src[32:64]))) return e, [] def cvtsd2si(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:64]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:64]))) return e, [] def cvtsd2ss(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fpconvert_fp32', src[:64]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fpconvert_fp32', src[:64]))) return e, [] def cvtsi2sd(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff( + m2_expr.ExprAssign( dst[:64], m2_expr.ExprOp( 'sint_to_fp', @@ -4208,21 +4208,21 @@ def cvtsi2sd(_, instr, dst, src): def cvtsi2ss(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('sint_to_fp', src[:32]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('sint_to_fp', src[:32]))) return e, [] def cvtss2sd(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:64], m2_expr.ExprOp('fpconvert_fp64', src[:32]))) + m2_expr.ExprAssign(dst[:64], m2_expr.ExprOp('fpconvert_fp64', src[:32]))) return e, [] def cvtss2si(_, instr, dst, src): e = [] e.append( - m2_expr.ExprAff(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:32]))) + m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fp_to_sint32', src[:32]))) return e, [] @@ -4236,7 +4236,7 @@ def _cvtt_tpl(dst, src, numbers, double): else: tmp_src = src[i*32:i*32 + 32] - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst[i*32:i*32 + 32], m2_expr.ExprOp('fp_to_sint32', m2_expr.ExprOp( 'fpround_towardszero', @@ -4249,7 +4249,7 @@ def cvttpd2pi(_, instr, dst, src): def cvttpd2dq(_, instr, dst, src): e = _cvtt_tpl(dst, src, [0, 1], double=True) - e.append(m2_expr.ExprAff(dst[64:128], m2_expr.ExprInt(0, 64))) + e.append(m2_expr.ExprAssign(dst[64:128], m2_expr.ExprInt(0, 64))) return e, [] def cvttsd2si(_, instr, dst, src): @@ -4268,44 +4268,44 @@ def movss(_, instr, dst, src): e = [] if not isinstance(dst, m2_expr.ExprMem) and not isinstance(src, m2_expr.ExprMem): # Source and Destination xmm - e.append(m2_expr.ExprAff(dst[:32], src[:32])) + e.append(m2_expr.ExprAssign(dst[:32], src[:32])) elif not isinstance(src, m2_expr.ExprMem) and isinstance(dst, m2_expr.ExprMem): # Source XMM Destination Mem - e.append(m2_expr.ExprAff(dst, src[:32])) + e.append(m2_expr.ExprAssign(dst, src[:32])) else: # Source Mem Destination XMM - e.append(m2_expr.ExprAff( + e.append(m2_expr.ExprAssign( dst, m2_expr.ExprCompose(src, m2_expr.ExprInt(0, 96)))) return e, [] def ucomiss(_, instr, src1, src2): e = [] - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp( + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp( 'ucomiss_zf', src1[:32], src2[:32]))) - e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp( + e.append(m2_expr.ExprAssign(pf, m2_expr.ExprOp( 'ucomiss_pf', src1[:32], src2[:32]))) - e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp( + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprOp( 'ucomiss_cf', src1[:32], src2[:32]))) - e.append(m2_expr.ExprAff(of, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(nf, m2_expr.ExprInt(0, 1))) return e, [] def ucomisd(_, instr, src1, src2): e = [] - e.append(m2_expr.ExprAff(zf, m2_expr.ExprOp( + e.append(m2_expr.ExprAssign(zf, m2_expr.ExprOp( 'ucomisd_zf', src1[:64], src2[:64]))) - e.append(m2_expr.ExprAff(pf, m2_expr.ExprOp( + e.append(m2_expr.ExprAssign(pf, m2_expr.ExprOp( 'ucomisd_pf', src1[:64], src2[:64]))) - e.append(m2_expr.ExprAff(cf, m2_expr.ExprOp( + e.append(m2_expr.ExprAssign(cf, m2_expr.ExprOp( 'ucomisd_cf', src1[:64], src2[:64]))) - e.append(m2_expr.ExprAff(of, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(af, m2_expr.ExprInt(0, 1))) - e.append(m2_expr.ExprAff(nf, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(of, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(af, m2_expr.ExprInt(0, 1))) + e.append(m2_expr.ExprAssign(nf, m2_expr.ExprInt(0, 1))) return e, [] @@ -4322,7 +4322,7 @@ def pshufb(_, instr, dst, src): index = src[ i:i + bit_l].zeroExtend(dst.size) << m2_expr.ExprInt(3, dst.size) value = (dst >> index)[:8] - e.append(m2_expr.ExprAff(dst[i:i + 8], + e.append(m2_expr.ExprAssign(dst[i:i + 8], m2_expr.ExprCond(src[i + 7:i + 8], m2_expr.ExprInt(0, 8), value))) @@ -4337,7 +4337,7 @@ def pshufd(_, instr, dst, src, imm): # shift is 2 bits long, expr.size is 128 # => shift + 32 <= src.size out.append(src[shift: shift + 32]) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def pshuflw(_, instr, dst, src, imm): @@ -4347,7 +4347,7 @@ def pshuflw(_, instr, dst, src, imm): shift = ((control >> (i * 2)) & 3) * 16 out.append(src[shift: shift + 16]) out.append(src[64:]) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def pshufhw(_, instr, dst, src, imm): @@ -4356,7 +4356,7 @@ def pshufhw(_, instr, dst, src, imm): for i in xrange(4): shift = ((control >> (i * 2)) & 3) * 16 out.append(src[shift + 64: shift + 16 + 64]) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def ps_rl_ll(ir, instr, dst, src, op, size): @@ -4378,7 +4378,7 @@ def ps_rl_ll(ir, instr, dst, src, op, size): out = [] for i in xrange(0, dst.size, size): out.append(m2_expr.ExprOp(op, dst[i:i + size], count)) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def psrlw(ir, instr, dst, src): @@ -4418,18 +4418,18 @@ def pslldq(_, instr, dst, src): e = [] count = int(src) if count > 15: - return [m2_expr.ExprAff(dst, m2_expr.ExprInt(0, dst.size))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprInt(0, dst.size))], [] else: - return [m2_expr.ExprAff(dst, dst << m2_expr.ExprInt(8 * count, dst.size))], [] + return [m2_expr.ExprAssign(dst, dst << m2_expr.ExprInt(8 * count, dst.size))], [] def psrldq(_, instr, dst, src): assert src.is_int() count = int(src) if count > 15: - return [m2_expr.ExprAff(dst, m2_expr.ExprInt(0, dst.size))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprInt(0, dst.size))], [] else: - return [m2_expr.ExprAff(dst, dst >> m2_expr.ExprInt(8 * count, dst.size))], [] + return [m2_expr.ExprAssign(dst, dst >> m2_expr.ExprInt(8 * count, dst.size))], [] def iret(ir, instr): @@ -4447,7 +4447,7 @@ def pcmpeq(_, instr, dst, src, size): e = [] for i in xrange(0, dst.size, size): test = m2_expr.expr_is_equal(dst[i:i + size], src[i:i + size]) - e.append(m2_expr.ExprAff(dst[i:i + size], + e.append(m2_expr.ExprAssign(dst[i:i + size], m2_expr.ExprCond(test, m2_expr.ExprInt(-1, size), m2_expr.ExprInt(0, size)))) @@ -4458,7 +4458,7 @@ def pcmpgt(_, instr, dst, src, size): e = [] for i in xrange(0, dst.size, size): test = m2_expr.expr_is_signed_greater(dst[i:i + size], src[i:i + size]) - e.append(m2_expr.ExprAff(dst[i:i + size], + e.append(m2_expr.ExprAssign(dst[i:i + size], m2_expr.ExprCond(test, m2_expr.ExprInt(-1, size), m2_expr.ExprInt(0, size)))) @@ -4500,7 +4500,7 @@ def punpck(_, instr, dst, src, size, off): for i in xrange(dst.size / (2 * size)): slices.append(dst[size * i + off: size * i + off + size]) slices.append(src[size * i + off: size * i + off + size]) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprCompose(*slices))) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*slices))) return e, [] @@ -4545,7 +4545,7 @@ def pinsr(_, instr, dst, src, imm, size): 64: 0x1}[size] sel = (int(imm) & mask) * size - e.append(m2_expr.ExprAff(dst[sel:sel + size], src[:size])) + e.append(m2_expr.ExprAssign(dst[sel:sel + size], src[:size])) return e, [] @@ -4575,7 +4575,7 @@ def pextr(_, instr, dst, src, imm, size): 64: 0x1}[size] sel = (int(imm) & mask) * size - e.append(m2_expr.ExprAff(dst, src[sel:sel + size].zeroExtend(dst.size))) + e.append(m2_expr.ExprAssign(dst, src[sel:sel + size].zeroExtend(dst.size))) return e, [] @@ -4599,49 +4599,49 @@ def pextrq(ir, instr, dst, src, imm): def unpckhps(_, instr, dst, src): e = [] src = m2_expr.ExprCompose(dst[64:96], src[64:96], dst[96:128], src[96:128]) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) return e, [] def unpckhpd(_, instr, dst, src): e = [] src = m2_expr.ExprCompose(dst[64:128], src[64:128]) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) return e, [] def unpcklps(_, instr, dst, src): e = [] src = m2_expr.ExprCompose(dst[0:32], src[0:32], dst[32:64], src[32:64]) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) return e, [] def unpcklpd(_, instr, dst, src): e = [] src = m2_expr.ExprCompose(dst[0:64], src[0:64]) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) return e, [] def movlpd(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst[:64], src[:64])) + e.append(m2_expr.ExprAssign(dst[:64], src[:64])) return e, [] def movlps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst[:64], src[:64])) + e.append(m2_expr.ExprAssign(dst[:64], src[:64])) return e, [] def movhpd(_, instr, dst, src): e = [] if src.size == 64: - e.append(m2_expr.ExprAff(dst[64:128], src)) + e.append(m2_expr.ExprAssign(dst[64:128], src)) elif dst.size == 64: - e.append(m2_expr.ExprAff(dst, src[64:128])) + e.append(m2_expr.ExprAssign(dst, src[64:128])) else: raise RuntimeError("bad encoding!") return e, [] @@ -4649,25 +4649,25 @@ def movhpd(_, instr, dst, src): def movlhps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst[64:128], src[:64])) + e.append(m2_expr.ExprAssign(dst[64:128], src[:64])) return e, [] def movhlps(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst[:64], src[64:128])) + e.append(m2_expr.ExprAssign(dst[:64], src[64:128])) return e, [] def movdq2q(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, src[:64])) + e.append(m2_expr.ExprAssign(dst, src[:64])) return e, [] def movq2dq(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst, src[:64].zeroExtend(dst.size))) + e.append(m2_expr.ExprAssign(dst, src[:64].zeroExtend(dst.size))) return e, [] @@ -4678,7 +4678,7 @@ def sqrt_gen(_, instr, dst, src, size): out.append(m2_expr.ExprOp('fsqrt', src[i * size: (i + 1) * size])) src = m2_expr.ExprCompose(*out) - e.append(m2_expr.ExprAff(dst, src)) + e.append(m2_expr.ExprAssign(dst, src)) return e, [] @@ -4692,7 +4692,7 @@ def sqrtps(ir, instr, dst, src): def sqrtsd(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst[:64], + e.append(m2_expr.ExprAssign(dst[:64], m2_expr.ExprOp('fsqrt', src[:64]))) return e, [] @@ -4700,7 +4700,7 @@ def sqrtsd(_, instr, dst, src): def sqrtss(_, instr, dst, src): e = [] - e.append(m2_expr.ExprAff(dst[:32], + e.append(m2_expr.ExprAssign(dst[:32], m2_expr.ExprOp('fsqrt', src[:32]))) return e, [] @@ -4712,14 +4712,14 @@ def pmovmskb(_, instr, dst, src): for i in xrange(src.size / 8): out.append(src[8 * i + 7:8 * (i + 1)]) src = m2_expr.ExprCompose(*out) - e.append(m2_expr.ExprAff(dst, src.zeroExtend(dst.size))) + e.append(m2_expr.ExprAssign(dst, src.zeroExtend(dst.size))) return e, [] def smsw(ir, instr, dst): e = [] LOG_X86_SEM.warning("DEFAULT SMSW %s!!", str(dst)) - e.append(m2_expr.ExprAff(dst, m2_expr.ExprInt(0x80050033, 32)[:dst.size])) + e.append(m2_expr.ExprAssign(dst, m2_expr.ExprInt(0x80050033, 32)[:dst.size])) return e, [] @@ -4744,7 +4744,7 @@ def palignr(ir, instr, dst, src, imm): dst[:shift], ) - return [m2_expr.ExprAff(dst, result)], [] + return [m2_expr.ExprAssign(dst, result)], [] def _signed_saturation(expr, dst_size): @@ -4816,7 +4816,7 @@ def packsswb(ir, instr, dst, src): for source in [dst, src]: for start in xrange(0, dst.size, 16): out.append(_signed_saturation(source[start:start + 16], 8)) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def packssdw(ir, instr, dst, src): @@ -4824,7 +4824,7 @@ def packssdw(ir, instr, dst, src): for source in [dst, src]: for start in xrange(0, dst.size, 32): out.append(_signed_saturation(source[start:start + 32], 16)) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def packuswb(ir, instr, dst, src): @@ -4832,7 +4832,7 @@ def packuswb(ir, instr, dst, src): for source in [dst, src]: for start in xrange(0, dst.size, 16): out.append(_unsigned_saturation(source[start:start + 16], 8)) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def _saturation_sub_unsigned(expr): @@ -4912,7 +4912,7 @@ def maskmovq(ir, instr, src, mask): cur_label = check_labels[i] next_check_label = check_labels[i + 1] if (i + 1) < len(check_labels) else loc_next_expr write_label = write_labels[i] - check = m2_expr.ExprAff(ir.IRDst, + check = m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(bit, write_label, next_check_label)) @@ -4926,13 +4926,13 @@ def maskmovq(ir, instr, src, mask): write_addr = dst_addr + m2_expr.ExprInt(i, dst_addr.size) # @8[DI/EDI/RDI + i] = src[byte i] - write_mem = m2_expr.ExprAff(m2_expr.ExprMem(write_addr, 8), + write_mem = m2_expr.ExprAssign(m2_expr.ExprMem(write_addr, 8), src[start: start + 8]) - jump = m2_expr.ExprAff(ir.IRDst, next_check_label) + jump = m2_expr.ExprAssign(ir.IRDst, next_check_label) blks.append(IRBlock(cur_label.loc_key, [AssignBlock([write_mem, jump], instr)])) # If mask is null, bypass all - e = [m2_expr.ExprAff(ir.IRDst, m2_expr.ExprCond(mask, + e = [m2_expr.ExprAssign(ir.IRDst, m2_expr.ExprCond(mask, check_labels[0], loc_next_expr))] return e, blks @@ -4945,7 +4945,7 @@ def emms(ir, instr): # Common value without too many option, 0x1fa0 STMXCSR_VALUE = 0x1fa0 def stmxcsr(ir, instr, dst): - return [m2_expr.ExprAff(dst, m2_expr.ExprInt(STMXCSR_VALUE, dst.size))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprInt(STMXCSR_VALUE, dst.size))], [] def ldmxcsr(ir, instr, dst): # Implemented as a NOP @@ -4977,7 +4977,7 @@ def shufps(ir, instr, dst, src, imm8): else: source = src out.append(_select4(source, (control >> (i * 2)) & 3)) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def shufpd(ir, instr, dst, src, imm8): @@ -4985,19 +4985,19 @@ def shufpd(ir, instr, dst, src, imm8): control = int(imm8) out.append(dst[64:] if control & 1 else dst[:64]) out.append(src[64:] if control & 2 else src[:64]) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out))], [] def movmskps(ir, instr, dst, src): out = [] for i in xrange(4): out.append(src[(32 * i) + 31:(32 * i) + 32]) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out).zeroExtend(dst.size))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out).zeroExtend(dst.size))], [] def movmskpd(ir, instr, dst, src): out = [] for i in xrange(2): out.append(src[(64 * i) + 63:(64 * i) + 64]) - return [m2_expr.ExprAff(dst, m2_expr.ExprCompose(*out).zeroExtend(dst.size))], [] + return [m2_expr.ExprAssign(dst, m2_expr.ExprCompose(*out).zeroExtend(dst.size))], [] mnemo_func = {'mov': mov, @@ -5692,17 +5692,17 @@ class ir_x86_16(IntermediateRepresentation): for irblock in extra_ir] cond_bloc = [] - cond_bloc.append(m2_expr.ExprAff(c_reg, + cond_bloc.append(m2_expr.ExprAssign(c_reg, c_reg - m2_expr.ExprInt(1, c_reg.size))) - cond_bloc.append(m2_expr.ExprAff(self.IRDst, m2_expr.ExprCond(c_cond, + cond_bloc.append(m2_expr.ExprAssign(self.IRDst, m2_expr.ExprCond(c_cond, loc_skip_expr, loc_do_expr))) cond_bloc = IRBlock(loc_end, [AssignBlock(cond_bloc, instr)]) e_do = instr_ir c = IRBlock(loc_do, [AssignBlock(e_do, instr)]) - e_n = [m2_expr.ExprAff(self.IRDst, m2_expr.ExprCond(c_reg, loc_do_expr, + e_n = [m2_expr.ExprAssign(self.IRDst, m2_expr.ExprCond(c_reg, loc_do_expr, loc_skip_expr))] return e_n, [cond_bloc, c] + new_extra_ir @@ -5712,7 +5712,7 @@ class ir_x86_16(IntermediateRepresentation): def expraff_fix_regs_for_mode(self, e, mode=64): dst = self.expr_fix_regs_for_mode(e.dst, mode) src = self.expr_fix_regs_for_mode(e.src, mode) - return m2_expr.ExprAff(dst, src) + return m2_expr.ExprAssign(dst, src) def irbloc_fix_regs_for_mode(self, irblock, mode=64): irs = [] @@ -5771,7 +5771,7 @@ class ir_x86_64(ir_x86_16): if dst != self.pc: dst = dst.replace_expr(pc_fixed) src = src.replace_expr(pc_fixed) - instr_ir[i] = m2_expr.ExprAff(dst, src) + instr_ir[i] = m2_expr.ExprAssign(dst, src) for idx, irblock in enumerate(extra_ir): extra_ir[idx] = irblock.modify_exprs(lambda expr: expr.replace_expr(pc_fixed) \ diff --git a/miasm2/core/sembuilder.py b/miasm2/core/sembuilder.py index ab1af953..67c6c257 100644 --- a/miasm2/core/sembuilder.py +++ b/miasm2/core/sembuilder.py @@ -161,7 +161,7 @@ class SemBuilder(object): """Recursive function transforming a @body to a block expression Return: - AST to append to body (real python statements) - - a list of blocks, ie list of affblock, ie list of ExprAff (AST)""" + - a list of blocks, ie list of affblock, ie list of ExprAssign (AST)""" # Init ## Real instructions @@ -188,7 +188,7 @@ class SemBuilder(object): dst.ctx = ast.Load() - res = ast.Call(func=ast.Name(id='ExprAff', + res = ast.Call(func=ast.Name(id='ExprAssign', ctx=ast.Load()), args=[dst, src], keywords=[], @@ -230,7 +230,7 @@ class SemBuilder(object): IRDst = ast.Attribute(value=ast.Name(id='ir', ctx=ast.Load()), attr='IRDst', ctx=ast.Load()) - blocks[-1][-1].append(ast.Call(func=ast.Name(id='ExprAff', + blocks[-1][-1].append(ast.Call(func=ast.Name(id='ExprAssign', ctx=ast.Load()), args=[IRDst, dst], keywords=[], @@ -248,7 +248,7 @@ class SemBuilder(object): raise RuntimeError("Imbricated if unimplemented") ## Close the last block - jmp_end = ast.Call(func=ast.Name(id='ExprAff', + jmp_end = ast.Call(func=ast.Name(id='ExprAssign', ctx=ast.Load()), args=[IRDst, loc_end], keywords=[], diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py index d617a8fa..58ebda60 100644 --- a/miasm2/expression/expression.py +++ b/miasm2/expression/expression.py @@ -20,7 +20,7 @@ # - ExprInt # - ExprId # - ExprLoc -# - ExprAff +# - ExprAssign # - ExprCond # - ExprMem # - ExprOp @@ -50,7 +50,7 @@ TOK_POS_STRICT = "Spos" EXPRINT = 1 EXPRID = 2 EXPRLOC = 3 -EXPRAFF = 4 +EXPRASSIGN = 4 EXPRCOND = 5 EXPRMEM = 6 EXPROP = 7 @@ -675,9 +675,9 @@ class ExprLoc(Expr): return True -class ExprAff(Expr): +class ExprAssign(Expr): - """An ExprAff represent an affection from an Expression to another one. + """An ExprAssign represent an affection from an Expression to another one. Some use cases: - var1 <- 2 @@ -686,7 +686,7 @@ class ExprAff(Expr): __slots__ = Expr.__slots__ + ["_dst", "_src"] def __init__(self, dst, src): - """Create an ExprAff for dst <- src + """Create an ExprAssign for dst <- src @dst: Expr, affectation destination @src: Expr, affectation source """ @@ -696,10 +696,10 @@ class ExprAff(Expr): if dst.size != src.size: raise ValueError( - "sanitycheck: ExprAff args must have same size! %s" % + "sanitycheck: ExprAssign args must have same size! %s" % ([(str(arg), arg.size) for arg in [dst, src]])) - super(ExprAff, self).__init__(self.dst.size) + super(ExprAssign, self).__init__(self.dst.size) dst = property(lambda self: self._dst) src = property(lambda self: self._src) @@ -743,7 +743,7 @@ class ExprAff(Expr): return self._dst.get_w() def _exprhash(self): - return hash((EXPRAFF, hash(self._dst), hash(self._src))) + return hash((EXPRASSIGN, hash(self._dst), hash(self._src))) def _exprrepr(self): return "%s(%r, %r)" % (self.__class__.__name__, self._dst, self._src) @@ -759,10 +759,10 @@ class ExprAff(Expr): if dst == self._dst and src == self._src: return self else: - return ExprAff(dst, src) + return ExprAssign(dst, src) def copy(self): - return ExprAff(self._dst.copy(), self._src.copy()) + return ExprAssign(self._dst.copy(), self._src.copy()) def depth(self): return max(self._src.depth(), self._dst.depth()) + 1 @@ -777,6 +777,17 @@ class ExprAff(Expr): return True +class ExprAff(ExprAssign): + """ + DEPRECATED class. + Use ExprAssign instead of ExprAff + """ + + def __init__(self, dst, src): + warnings.warn('DEPRECATION WARNING: use ExprAssign instead of ExprAff') + super(ExprAff, self).__init__(dst, src) + + class ExprCond(Expr): """An ExprCond stand for a condition on an Expr @@ -1402,9 +1413,9 @@ def compare_exprs(expr1, expr2): if ret: return ret return cmp(expr1.size, expr2.size) - elif cls1 == ExprAff: + elif cls1 == ExprAssign: raise NotImplementedError( - "Comparaison from an ExprAff not yet implemented") + "Comparaison from an ExprAssign not yet implemented") elif cls2 == ExprCond: ret = compare_exprs(expr1.cond, expr2.cond) if ret: diff --git a/miasm2/expression/expression_helper.py b/miasm2/expression/expression_helper.py index 5de9e04f..7db41394 100644 --- a/miasm2/expression/expression_helper.py +++ b/miasm2/expression/expression_helper.py @@ -515,7 +515,7 @@ class CondConstraintZero(CondConstraint): operator = m2_expr.TOK_EQUAL def to_constraint(self): - return m2_expr.ExprAff(self.expr, m2_expr.ExprInt(0, self.expr.size)) + return m2_expr.ExprAssign(self.expr, m2_expr.ExprInt(0, self.expr.size)) class CondConstraintNotZero(CondConstraint): @@ -525,7 +525,7 @@ class CondConstraintNotZero(CondConstraint): def to_constraint(self): cst1, cst2 = m2_expr.ExprInt(0, 1), m2_expr.ExprInt(1, 1) - return m2_expr.ExprAff(cst1, m2_expr.ExprCond(self.expr, cst1, cst2)) + return m2_expr.ExprAssign(cst1, m2_expr.ExprCond(self.expr, cst1, cst2)) ConstrainedValue = collections.namedtuple("ConstrainedValue", @@ -568,7 +568,7 @@ def possible_values(expr): m2_expr.ExprMem(consval.value, expr.size)) for consval in possible_values(expr.arg)) - elif isinstance(expr, m2_expr.ExprAff): + elif isinstance(expr, m2_expr.ExprAssign): consvals.update(possible_values(expr.src)) # Special case: constraint insertion elif isinstance(expr, m2_expr.ExprCond): diff --git a/miasm2/expression/parser.py b/miasm2/expression/parser.py index cbfd58d0..71efc849 100644 --- a/miasm2/expression/parser.py +++ b/miasm2/expression/parser.py @@ -1,6 +1,6 @@ import pyparsing from miasm2.expression.expression import ExprInt, ExprId, ExprLoc, ExprSlice, \ - ExprMem, ExprCond, ExprCompose, ExprOp, ExprAff, LocKey + ExprMem, ExprCond, ExprCompose, ExprOp, ExprAssign, LocKey integer = pyparsing.Word(pyparsing.nums).setParseAction(lambda t: int(t[0])) @@ -22,7 +22,7 @@ STR_EXPRMEM = pyparsing.Suppress("ExprMem") STR_EXPRCOND = pyparsing.Suppress("ExprCond") STR_EXPRCOMPOSE = pyparsing.Suppress("ExprCompose") STR_EXPROP = pyparsing.Suppress("ExprOp") -STR_EXPRAFF = pyparsing.Suppress("ExprAff") +STR_EXPRASSIGN = pyparsing.Suppress("ExprAssign") LOCKEY = pyparsing.Suppress("LocKey") @@ -51,7 +51,7 @@ expr_mem = STR_EXPRMEM + LPARENTHESIS + expr + STR_COMMA + str_int + RPARENTHESI expr_cond = STR_EXPRCOND + LPARENTHESIS + expr + STR_COMMA + expr + STR_COMMA + expr + RPARENTHESIS expr_compose = STR_EXPRCOMPOSE + LPARENTHESIS + pyparsing.delimitedList(expr, delim=',') + RPARENTHESIS expr_op = STR_EXPROP + LPARENTHESIS + string + STR_COMMA + pyparsing.delimitedList(expr, delim=',') + RPARENTHESIS -expr_aff = STR_EXPRAFF + LPARENTHESIS + expr + STR_COMMA + expr + RPARENTHESIS +expr_aff = STR_EXPRASSIGN + LPARENTHESIS + expr + STR_COMMA + expr + RPARENTHESIS expr << (expr_int | expr_id | expr_loc | expr_slice | expr_mem | expr_cond | \ expr_compose | expr_op | expr_aff) @@ -69,7 +69,7 @@ expr_mem.setParseAction(lambda t: ExprMem(*t)) expr_cond.setParseAction(lambda t: ExprCond(*t)) expr_compose.setParseAction(lambda t: ExprCompose(*t)) expr_op.setParseAction(lambda t: ExprOp(*t)) -expr_aff.setParseAction(lambda t: ExprAff(*t)) +expr_aff.setParseAction(lambda t: ExprAssign(*t)) def str_to_expr(str_in): diff --git a/miasm2/ir/analysis.py b/miasm2/ir/analysis.py index d49f6b4e..9158aceb 100644 --- a/miasm2/ir/analysis.py +++ b/miasm2/ir/analysis.py @@ -4,7 +4,7 @@ import warnings import logging from miasm2.ir.ir import IntermediateRepresentation, AssignBlock -from miasm2.expression.expression import ExprOp, ExprAff +from miasm2.expression.expression import ExprOp, ExprAssign from miasm2.analysis.data_flow import dead_simp as new_dead_simp_imp @@ -45,8 +45,8 @@ class ira(IntermediateRepresentation): call_assignblk = AssignBlock( [ - ExprAff(self.ret_reg, ExprOp('call_func_ret', addr, self.sp)), - ExprAff(self.sp, ExprOp('call_func_stack', addr, self.sp)) + ExprAssign(self.ret_reg, ExprOp('call_func_ret', addr, self.sp)), + ExprAssign(self.sp, ExprOp('call_func_stack', addr, self.sp)) ], instr ) diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py index db47d4ef..a77ce992 100644 --- a/miasm2/ir/ir.py +++ b/miasm2/ir/ir.py @@ -58,7 +58,7 @@ class AssignBlock(object): def __init__(self, irs=None, instr=None): """Create a new AssignBlock - @irs: (optional) sequence of ExprAff, or dictionnary dst (Expr) -> src + @irs: (optional) sequence of ExprAssign, or dictionnary dst (Expr) -> src (Expr) @instr: (optional) associate an instruction with this AssignBlock @@ -66,7 +66,7 @@ class AssignBlock(object): if irs is None: irs = [] self._instr = instr - self._assigns = {} # ExprAff.dst -> ExprAff.src + self._assigns = {} # ExprAssign.dst -> ExprAssign.src # Concurrent assignments are handled in _set if hasattr(irs, "iteritems"): @@ -250,10 +250,10 @@ class AssignBlock(object): out.append("%s = %s" % (dst, src)) return "\n".join(out) - def dst2ExprAff(self, dst): - """Return an ExprAff corresponding to @dst equation + def dst2ExprAssign(self, dst): + """Return an ExprAssign corresponding to @dst equation @dst: Expr instance""" - return m2_expr.ExprAff(dst, self[dst]) + return m2_expr.ExprAssign(dst, self[dst]) def simplify(self, simplifier): """ diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py index 71f42636..1146dce6 100644 --- a/miasm2/ir/translators/C.py +++ b/miasm2/ir/translators/C.py @@ -77,7 +77,7 @@ class TranslatorC(Translator): value, int_size = int_size_to_bn(offset, 64) return 'bignum_from_string("%s", %d)' % (value, int_size) - def from_ExprAff(self, expr): + def from_ExprAssign(self, expr): new_dst = self.from_expr(expr.dst) new_src = self.from_expr(expr.src) return "%s = %s" % (new_dst, new_src) diff --git a/miasm2/ir/translators/miasm.py b/miasm2/ir/translators/miasm.py index b390eb51..d8509d24 100644 --- a/miasm2/ir/translators/miasm.py +++ b/miasm2/ir/translators/miasm.py @@ -30,8 +30,8 @@ class TranslatorMiasm(Translator): args = ["%s" % self.from_expr(arg) for arg in expr.args] return "ExprCompose(%s)" % ", ".join(args) - def from_ExprAff(self, expr): - return "ExprAff(%s, %s)" % (self.from_expr(expr.dst), + def from_ExprAssign(self, expr): + return "ExprAssign(%s, %s)" % (self.from_expr(expr.dst), self.from_expr(expr.src)) def from_ExprMem(self, expr): diff --git a/miasm2/ir/translators/python.py b/miasm2/ir/translators/python.py index e05f5e4d..c6eb0ba8 100644 --- a/miasm2/ir/translators/python.py +++ b/miasm2/ir/translators/python.py @@ -74,7 +74,7 @@ class TranslatorPython(Translator): raise NotImplementedError("Unknown operator: %s" % expr.op) - def from_ExprAff(self, expr): + def from_ExprAssign(self, expr): return "%s = %s" % tuple(map(self.from_expr, (expr.dst, expr.src))) diff --git a/miasm2/ir/translators/smt2.py b/miasm2/ir/translators/smt2.py index f285c92a..408eb53f 100644 --- a/miasm2/ir/translators/smt2.py +++ b/miasm2/ir/translators/smt2.py @@ -278,7 +278,7 @@ class TranslatorSMT2(Translator): return res - def from_ExprAff(self, expr): + def from_ExprAssign(self, expr): src = self.from_expr(expr.src) dst = self.from_expr(expr.dst) return smt2_assert(smt2_eq(src, dst)) diff --git a/miasm2/ir/translators/translator.py b/miasm2/ir/translators/translator.py index 557fdabe..a56c6a62 100644 --- a/miasm2/ir/translators/translator.py +++ b/miasm2/ir/translators/translator.py @@ -83,9 +83,9 @@ class Translator(object): """ raise NotImplementedError("Abstract method") - def from_ExprAff(self, expr): - """Translate an ExprAff - @expr: ExprAff to translate + def from_ExprAssign(self, expr): + """Translate an ExprAssign + @expr: ExprAssign to translate """ raise NotImplementedError("Abstract method") @@ -111,7 +111,7 @@ class Translator(object): m2_expr.ExprSlice: self.from_ExprSlice, m2_expr.ExprOp: self.from_ExprOp, m2_expr.ExprMem: self.from_ExprMem, - m2_expr.ExprAff: self.from_ExprAff, + m2_expr.ExprAssign: self.from_ExprAssign, m2_expr.ExprCond: self.from_ExprCond } for target, handler in handlers.iteritems(): diff --git a/miasm2/ir/translators/z3_ir.py b/miasm2/ir/translators/z3_ir.py index a481acd7..97a0397a 100644 --- a/miasm2/ir/translators/z3_ir.py +++ b/miasm2/ir/translators/z3_ir.py @@ -239,7 +239,7 @@ class TranslatorZ3(Translator): return res - def from_ExprAff(self, expr): + def from_ExprAssign(self, expr): src = self.from_expr(expr.src) dst = self.from_expr(expr.dst) return (src == dst) diff --git a/test/analysis/data_flow.py b/test/analysis/data_flow.py index d0dbbd8d..53c9b01b 100644 --- a/test/analysis/data_flow.py +++ b/test/analysis/data_flow.py @@ -1,5 +1,5 @@ """ Test cases for dead code elimination""" -from miasm2.expression.expression import ExprId, ExprInt, ExprAff, ExprMem +from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprMem from miasm2.core.locationdb import LocationDB from miasm2.analysis.data_flow import * from miasm2.ir.analysis import ira @@ -83,9 +83,9 @@ IRA = IRATest(loc_db) G1_IRA = IRA.new_ircfg() -G1_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(b, CST2)]]) -G1_IRB1 = gen_irblock(LBL1, [[ExprAff(a, b)]]) -G1_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)]]) +G1_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(b, CST2)]]) +G1_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, b)]]) +G1_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)]]) for irb in [G1_IRB0, G1_IRB1, G1_IRB2]: G1_IRA.add_irblock(irb) @@ -96,9 +96,9 @@ G1_IRA.add_uniq_edge(G1_IRB1.loc_key, G1_IRB2.loc_key) # Expected output for graph 1 G1_EXP_IRA = IRA.new_ircfg() -G1_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAff(b, CST2)]]) -G1_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(a, b)]]) -G1_EXP_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)]]) +G1_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAssign(b, CST2)]]) +G1_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, b)]]) +G1_EXP_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)]]) for irb in [G1_EXP_IRB0, G1_EXP_IRB1, G1_EXP_IRB2]: G1_EXP_IRA.add_irblock(irb) @@ -107,9 +107,9 @@ for irb in [G1_EXP_IRB0, G1_EXP_IRB1, G1_EXP_IRB2]: G2_IRA = IRA.new_ircfg() -G2_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(r, CST1)]]) -G2_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)]]) -G2_IRB2 = gen_irblock(LBL2, [[ExprAff(a, r)]]) +G2_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(r, CST1)]]) +G2_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)]]) +G2_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, r)]]) for irb in [G2_IRB0, G2_IRB1, G2_IRB2]: G2_IRA.add_irblock(irb) @@ -121,7 +121,7 @@ G2_IRA.add_uniq_edge(G2_IRB1.loc_key, G2_IRB1.loc_key) # Expected output for graph 2 G2_EXP_IRA = IRA.new_ircfg() -G2_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAff(r, CST1)]]) +G2_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAssign(r, CST1)]]) G2_EXP_IRB1 = gen_irblock(LBL1, [[]]) G2_EXP_IRB2 = gen_irblock(LBL2, [[]]) @@ -132,9 +132,9 @@ for irb in [G2_EXP_IRB0, G2_EXP_IRB1, G2_EXP_IRB2]: G3_IRA = IRA.new_ircfg() -G3_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)]]) -G3_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)]]) -G3_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)]]) +G3_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)]]) +G3_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)]]) +G3_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)]]) for irb in [G3_IRB0, G3_IRB1, G3_IRB2]: G3_IRA.add_irblock(irb) @@ -146,9 +146,9 @@ G3_IRA.add_uniq_edge(G3_IRB1.loc_key, G3_IRB1.loc_key) # Expected output for graph 3 G3_EXP_IRA = IRA.new_ircfg() -G3_EXP_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)]]) -G3_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)]]) -G3_EXP_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)]]) +G3_EXP_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)]]) +G3_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)]]) +G3_EXP_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)]]) for irb in [G3_EXP_IRB0, G3_EXP_IRB1, G3_EXP_IRB2]: G3_EXP_IRA.add_irblock(irb) @@ -157,10 +157,10 @@ for irb in [G3_EXP_IRB0, G3_EXP_IRB1, G3_EXP_IRB2]: G4_IRA = IRA.new_ircfg() -G4_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)]]) -G4_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)]]) -G4_IRB2 = gen_irblock(LBL2, [[ExprAff(a, a+CST2)]]) -G4_IRB3 = gen_irblock(LBL3, [[ExprAff(a, CST3)], [ExprAff(r, a)]]) +G4_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)]]) +G4_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)]]) +G4_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, a+CST2)]]) +G4_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, CST3)], [ExprAssign(r, a)]]) for irb in [G4_IRB0, G4_IRB1, G4_IRB2, G4_IRB3]: G4_IRA.add_irblock(irb) @@ -176,7 +176,7 @@ G4_EXP_IRA = IRA.new_ircfg() G4_EXP_IRB0 = gen_irblock(LBL0, [[]]) G4_EXP_IRB1 = gen_irblock(LBL1, [[]]) G4_EXP_IRB2 = gen_irblock(LBL2, [[]]) -G4_EXP_IRB3 = gen_irblock(LBL3, [[ExprAff(a, CST3)], [ExprAff(r, a)]]) +G4_EXP_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, CST3)], [ExprAssign(r, a)]]) for irb in [G4_EXP_IRB0, G4_EXP_IRB1, G4_EXP_IRB2, G4_EXP_IRB3]: G4_EXP_IRA.add_irblock(irb) @@ -185,12 +185,12 @@ for irb in [G4_EXP_IRB0, G4_EXP_IRB1, G4_EXP_IRB2, G4_EXP_IRB3]: G5_IRA = IRA.new_ircfg() -G5_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)]]) -G5_IRB1 = gen_irblock(LBL1, [[ExprAff(r, CST2)]]) -G5_IRB2 = gen_irblock(LBL2, [[ExprAff(a, a+CST2)]]) -G5_IRB3 = gen_irblock(LBL3, [[ExprAff(a, a+CST3)]]) -G5_IRB4 = gen_irblock(LBL4, [[ExprAff(a, a+CST1)]]) -G5_IRB5 = gen_irblock(LBL5, [[ExprAff(a, r)]]) +G5_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)]]) +G5_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, CST2)]]) +G5_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, a+CST2)]]) +G5_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, a+CST3)]]) +G5_IRB4 = gen_irblock(LBL4, [[ExprAssign(a, a+CST1)]]) +G5_IRB5 = gen_irblock(LBL5, [[ExprAssign(a, r)]]) for irb in [G5_IRB0, G5_IRB1, G5_IRB2, G5_IRB3, G5_IRB4, G5_IRB5]: G5_IRA.add_irblock(irb) @@ -207,7 +207,7 @@ G5_IRA.add_uniq_edge(G5_IRB4.loc_key, G5_IRB1.loc_key) G5_EXP_IRA = IRA.new_ircfg() G5_EXP_IRB0 = gen_irblock(LBL0, [[]]) -G5_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(r, CST2)]]) +G5_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, CST2)]]) G5_EXP_IRB2 = gen_irblock(LBL2, [[]]) G5_EXP_IRB3 = gen_irblock(LBL3, [[]]) G5_EXP_IRB4 = gen_irblock(LBL4, [[]]) @@ -222,10 +222,10 @@ for irb in [G5_EXP_IRB0, G5_EXP_IRB1, G5_EXP_IRB2, G6_IRA = IRA.new_ircfg() -G6_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)]]) -G6_IRB1 = gen_irblock(LBL1, [[ExprAff(b, a)]]) -G6_IRB2 = gen_irblock(LBL2, [[ExprAff(a, b)]]) -G6_IRB3 = gen_irblock(LBL3, [[ExprAff(r, CST2)]]) +G6_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)]]) +G6_IRB1 = gen_irblock(LBL1, [[ExprAssign(b, a)]]) +G6_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, b)]]) +G6_IRB3 = gen_irblock(LBL3, [[ExprAssign(r, CST2)]]) for irb in [G6_IRB0, G6_IRB1, G6_IRB2, G6_IRB3]: G6_IRA.add_irblock(irb) @@ -241,7 +241,7 @@ G6_EXP_IRA = IRA.new_ircfg() G6_EXP_IRB0 = gen_irblock(LBL0, [[]]) G6_EXP_IRB1 = gen_irblock(LBL1, [[]]) G6_EXP_IRB2 = gen_irblock(LBL2, [[]]) -G6_EXP_IRB3 = gen_irblock(LBL3, [[ExprAff(r, CST2)]]) +G6_EXP_IRB3 = gen_irblock(LBL3, [[ExprAssign(r, CST2)]]) for irb in [G6_EXP_IRB0, G6_EXP_IRB1, G6_EXP_IRB2, G6_EXP_IRB3]: G6_EXP_IRA.add_irblock(irb) @@ -250,10 +250,10 @@ for irb in [G6_EXP_IRB0, G6_EXP_IRB1, G6_EXP_IRB2, G6_EXP_IRB3]: G7_IRA = IRA.new_ircfg() -G7_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(r, CST1)]]) -G7_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)]]) -G7_IRB2 = gen_irblock(LBL2, [[ExprAff(a, a+CST2)]]) -G7_IRB3 = gen_irblock(LBL3, [[ExprAff(a, r)]]) +G7_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(r, CST1)]]) +G7_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)]]) +G7_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, a+CST2)]]) +G7_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, r)]]) for irb in [G7_IRB0, G7_IRB1, G7_IRB2, G7_IRB3]: G7_IRA.add_irblock(irb) @@ -268,7 +268,7 @@ G7_IRA.add_uniq_edge(G7_IRB0.loc_key, G7_IRB2.loc_key) # Expected output for graph 7 G7_EXP_IRA = IRA.new_ircfg() -G7_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAff(r, CST1)]]) +G7_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAssign(r, CST1)]]) G7_EXP_IRB1 = gen_irblock(LBL1, [[]]) G7_EXP_IRB2 = gen_irblock(LBL2, [[]]) G7_EXP_IRB3 = gen_irblock(LBL3, [[]]) @@ -280,10 +280,10 @@ for irb in [G7_EXP_IRB0, G7_EXP_IRB1, G7_EXP_IRB2, G7_EXP_IRB3]: G8_IRA = IRA.new_ircfg() -G8_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(b, CST1)]]) -G8_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)]]) -G8_IRB2 = gen_irblock(LBL2, [[ExprAff(b, b+CST2)]]) -G8_IRB3 = gen_irblock(LBL3, [[ExprAff(a, b)]]) +G8_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(b, CST1)]]) +G8_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)]]) +G8_IRB2 = gen_irblock(LBL2, [[ExprAssign(b, b+CST2)]]) +G8_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, b)]]) for irb in [G8_IRB0, G8_IRB1, G8_IRB2, G8_IRB3]: @@ -312,11 +312,11 @@ for irb in [G8_EXP_IRB0, G8_EXP_IRB1, G8_EXP_IRB2, G8_EXP_IRB3]: G9_IRA = IRA.new_ircfg() -G9_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(b, CST1)]]) -G9_IRB1 = gen_irblock(LBL1, [[ExprAff(a, a+CST1)], [ExprAff(b, b+CST1)]]) -G9_IRB2 = gen_irblock(LBL2, [[ExprAff(a, a+CST2)], [ExprAff(b, b+CST2)]]) -G9_IRB3 = gen_irblock(LBL3, [[ExprAff(a, b)]]) -G9_IRB4 = gen_irblock(LBL4, [[ExprAff(r, a)], [ExprAff(r, b)]]) +G9_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(b, CST1)]]) +G9_IRB1 = gen_irblock(LBL1, [[ExprAssign(a, a+CST1)], [ExprAssign(b, b+CST1)]]) +G9_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, a+CST2)], [ExprAssign(b, b+CST2)]]) +G9_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, b)]]) +G9_IRB4 = gen_irblock(LBL4, [[ExprAssign(r, a)], [ExprAssign(r, b)]]) for irb in [G9_IRB0, G9_IRB1, G9_IRB2, G9_IRB3, G9_IRB4]: G9_IRA.add_irblock(irb) @@ -335,11 +335,11 @@ G9_IRA.add_uniq_edge(G9_IRB3.loc_key, G9_IRB4.loc_key) G9_EXP_IRA = IRA.new_ircfg() -G9_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAff(b, CST1)]]) -G9_EXP_IRB1 = gen_irblock(LBL1, [[], [ExprAff(b, b+CST1)]]) -G9_EXP_IRB2 = gen_irblock(LBL2, [[], [ExprAff(b, b+CST2)]]) +G9_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAssign(b, CST1)]]) +G9_EXP_IRB1 = gen_irblock(LBL1, [[], [ExprAssign(b, b+CST1)]]) +G9_EXP_IRB2 = gen_irblock(LBL2, [[], [ExprAssign(b, b+CST2)]]) G9_EXP_IRB3 = gen_irblock(LBL3, [[]]) -G9_EXP_IRB4 = gen_irblock(LBL4, [[], [ExprAff(r, b)]]) +G9_EXP_IRB4 = gen_irblock(LBL4, [[], [ExprAssign(r, b)]]) for irb in [G9_EXP_IRB0, G9_EXP_IRB1, G9_EXP_IRB2, G9_EXP_IRB3, G9_EXP_IRB4]: G9_EXP_IRA.add_irblock(irb) @@ -349,10 +349,10 @@ for irb in [G9_EXP_IRB0, G9_EXP_IRB1, G9_EXP_IRB2, G9_EXP_IRB3, G9_EXP_IRB4]: G10_IRA = IRA.new_ircfg() -G10_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)]]) -G10_IRB1 = gen_irblock(LBL1, [[ExprAff(b, a)]]) -G10_IRB2 = gen_irblock(LBL2, [[ExprAff(a, b)]]) -G10_IRB3 = gen_irblock(LBL3, [[ExprAff(r, CST1)]]) +G10_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)]]) +G10_IRB1 = gen_irblock(LBL1, [[ExprAssign(b, a)]]) +G10_IRB2 = gen_irblock(LBL2, [[ExprAssign(a, b)]]) +G10_IRB3 = gen_irblock(LBL3, [[ExprAssign(r, CST1)]]) for irb in [G10_IRB0, G10_IRB1, G10_IRB2, G10_IRB3]: G10_IRA.add_irblock(irb) @@ -369,7 +369,7 @@ G10_EXP_IRA = IRA.new_ircfg() G10_EXP_IRB0 = gen_irblock(LBL0, [[]]) G10_EXP_IRB1 = gen_irblock(LBL1, [[]]) G10_EXP_IRB2 = gen_irblock(LBL2, [[]]) -G10_EXP_IRB3 = gen_irblock(LBL3, [[ExprAff(r, CST1)]]) +G10_EXP_IRB3 = gen_irblock(LBL3, [[ExprAssign(r, CST1)]]) for irb in [G10_EXP_IRB0, G10_EXP_IRB1, G10_EXP_IRB2, G10_EXP_IRB3]: G10_EXP_IRA.add_irblock(irb) @@ -378,11 +378,11 @@ for irb in [G10_EXP_IRB0, G10_EXP_IRB1, G10_EXP_IRB2, G10_EXP_IRB3]: G11_IRA = IRA.new_ircfg() -G11_IRB0 = gen_irblock(LBL0, [[ExprAff(a, b)]]) -G11_IRB1 = gen_irblock(LBL1, [[ExprAff(b, a)]]) -G11_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)]]) -G11_IRB3 = gen_irblock(LBL3, [[ExprAff(a, a+CST1)]]) -G11_IRB4 = gen_irblock(LBL4, [[ExprAff(b, b+CST1)]]) +G11_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, b)]]) +G11_IRB1 = gen_irblock(LBL1, [[ExprAssign(b, a)]]) +G11_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)]]) +G11_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, a+CST1)]]) +G11_IRB4 = gen_irblock(LBL4, [[ExprAssign(b, b+CST1)]]) for irb in [G11_IRB0, G11_IRB1, G11_IRB2]: @@ -398,11 +398,11 @@ G11_IRA.add_uniq_edge(G11_IRB1.loc_key, G11_IRB2.loc_key) # Expected output for graph 11 G11_EXP_IRA = IRA.new_ircfg() -G11_EXP_IRB0 = gen_irblock(LBL0, [[ExprAff(a, b)]]) -G11_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(b, a)]]) -G11_EXP_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)]]) -#G11_EXP_IRB3 = gen_irblock(LBL3, [[ExprAff(a, a+CST1)]]) -#G11_EXP_IRB4 = gen_irblock(LBL4, [[ExprAff(b, b+CST1)]]) +G11_EXP_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, b)]]) +G11_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(b, a)]]) +G11_EXP_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)]]) +#G11_EXP_IRB3 = gen_irblock(LBL3, [[ExprAssign(a, a+CST1)]]) +#G11_EXP_IRB4 = gen_irblock(LBL4, [[ExprAssign(b, b+CST1)]]) for irb in [G11_EXP_IRB0, G11_EXP_IRB1, G11_EXP_IRB2]: @@ -413,12 +413,12 @@ for irb in [G11_EXP_IRB0, G11_EXP_IRB1, G12_IRA = IRA.new_ircfg() -G12_IRB0 = gen_irblock(LBL0, [[ExprAff(r, CST1)], [ExprAff(a, CST2)]]) -G12_IRB1 = gen_irblock(LBL1, [[ExprAff(r, CST2)]]) -G12_IRB2 = gen_irblock(LBL2, [[ExprAff(r, a)], [ExprAff(b, CST3)]]) -G12_IRB3 = gen_irblock(LBL3, [[ExprAff(r, CST3)]]) -G12_IRB4 = gen_irblock(LBL4, [[ExprAff(r, CST2)]]) -G12_IRB5 = gen_irblock(LBL5, [[ExprAff(r, b)]]) +G12_IRB0 = gen_irblock(LBL0, [[ExprAssign(r, CST1)], [ExprAssign(a, CST2)]]) +G12_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, CST2)]]) +G12_IRB2 = gen_irblock(LBL2, [[ExprAssign(r, a)], [ExprAssign(b, CST3)]]) +G12_IRB3 = gen_irblock(LBL3, [[ExprAssign(r, CST3)]]) +G12_IRB4 = gen_irblock(LBL4, [[ExprAssign(r, CST2)]]) +G12_IRB5 = gen_irblock(LBL5, [[ExprAssign(r, b)]]) for irb in [G12_IRB0, G12_IRB1, G12_IRB2, G12_IRB3, G12_IRB4, G12_IRB5]: G12_IRA.add_irblock(irb) @@ -433,11 +433,11 @@ G12_IRA.add_uniq_edge(G12_IRB4.loc_key, G12_IRB5.loc_key) G12_EXP_IRA = IRA.new_ircfg() G12_EXP_IRB0 = gen_irblock(LBL0, [[], []]) -G12_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(r, CST2)]]) -G12_EXP_IRB2 = gen_irblock(LBL2, [[], [ExprAff(b, CST3)]]) -G12_EXP_IRB3 = gen_irblock(LBL3, [[ExprAff(r, CST3)]]) +G12_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, CST2)]]) +G12_EXP_IRB2 = gen_irblock(LBL2, [[], [ExprAssign(b, CST3)]]) +G12_EXP_IRB3 = gen_irblock(LBL3, [[ExprAssign(r, CST3)]]) G12_EXP_IRB4 = gen_irblock(LBL4, [[]]) -G12_EXP_IRB5 = gen_irblock(LBL5, [[ExprAff(r, b)]]) +G12_EXP_IRB5 = gen_irblock(LBL5, [[ExprAssign(r, b)]]) for irb in [G12_EXP_IRB0, G12_EXP_IRB1, @@ -449,12 +449,12 @@ for irb in [G12_EXP_IRB0, G12_EXP_IRB1, G13_IRA = IRA.new_ircfg() -G13_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(b, CST2)]]) -G13_IRB1 = gen_irblock(LBL1, [[ExprAff(r, b)]]) -G13_IRB2 = gen_irblock(LBL2, [[ExprAff(d, CST2)], [ExprAff(a, b+CST1), - ExprAff(c, a+b)]]) +G13_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(b, CST2)]]) +G13_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, b)]]) +G13_IRB2 = gen_irblock(LBL2, [[ExprAssign(d, CST2)], [ExprAssign(a, b+CST1), + ExprAssign(c, a+b)]]) G13_IRB3 = gen_irblock(LBL3, [[]]) # lost son -G13_IRB4 = gen_irblock(LBL4, [[ExprAff(b, CST2)]]) +G13_IRB4 = gen_irblock(LBL4, [[ExprAssign(b, CST2)]]) for irb in [G13_IRB0, G13_IRB1, G13_IRB2, G13_IRB4]: G13_IRA.add_irblock(irb) @@ -467,12 +467,12 @@ G13_IRA.add_uniq_edge(G13_IRB4.loc_key, G13_IRB2.loc_key) # Expected output for graph 13 G13_EXP_IRA = IRA.new_ircfg() -G13_EXP_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(b, CST2)]]) -G13_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(r, b)]]) -G13_EXP_IRB2 = gen_irblock(LBL2, [[ExprAff(d, CST2)], [ExprAff(a, b+CST1), - ExprAff(c, a+b)]]) +G13_EXP_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(b, CST2)]]) +G13_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, b)]]) +G13_EXP_IRB2 = gen_irblock(LBL2, [[ExprAssign(d, CST2)], [ExprAssign(a, b+CST1), + ExprAssign(c, a+b)]]) G13_EXP_IRB3 = gen_irblock(LBL3, [[]]) -G13_EXP_IRB4 = gen_irblock(LBL4, [[ExprAff(b, CST2)]]) +G13_EXP_IRB4 = gen_irblock(LBL4, [[ExprAssign(b, CST2)]]) for irb in [G13_EXP_IRB0, G13_EXP_IRB1, G13_EXP_IRB2, G13_EXP_IRB4]: G13_EXP_IRA.add_irblock(irb) @@ -484,9 +484,9 @@ for irb in [G13_EXP_IRB0, G13_EXP_IRB1, G13_EXP_IRB2, G13_EXP_IRB4]: G14_IRA = IRA.new_ircfg() -G14_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(c, a)], - [ExprAff(a, CST2)]]) -G14_IRB1 = gen_irblock(LBL1, [[ExprAff(r, a+c)]]) +G14_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(c, a)], + [ExprAssign(a, CST2)]]) +G14_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, a+c)]]) for irb in [G14_IRB0, G14_IRB1]: G14_IRA.add_irblock(irb) @@ -496,9 +496,9 @@ G14_IRA.add_uniq_edge(G14_IRB0.loc_key, G14_IRB1.loc_key) # Expected output for graph 1 G14_EXP_IRA = IRA.new_ircfg() -G14_EXP_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1)], [ExprAff(c, a)], - [ExprAff(a, CST2)]]) -G14_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(r, a+c)]]) +G14_EXP_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1)], [ExprAssign(c, a)], + [ExprAssign(a, CST2)]]) +G14_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, a+c)]]) for irb in [G14_EXP_IRB0, G14_EXP_IRB1]: G14_EXP_IRA.add_irblock(irb) @@ -508,10 +508,10 @@ for irb in [G14_EXP_IRB0, G14_EXP_IRB1]: G15_IRA = IRA.new_ircfg() -G15_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST2)], [ExprAff(a, CST1), - ExprAff(b, a+CST2), - ExprAff(c, CST1)]]) -G15_IRB1 = gen_irblock(LBL1, [[ExprAff(r, a)]]) +G15_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST2)], [ExprAssign(a, CST1), + ExprAssign(b, a+CST2), + ExprAssign(c, CST1)]]) +G15_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, a)]]) for irb in [G15_IRB0, G15_IRB1]: G15_IRA.add_irblock(irb) @@ -521,8 +521,8 @@ G15_IRA.add_uniq_edge(G15_IRB0.loc_key, G15_IRB1.loc_key) # Expected output for graph 1 G15_EXP_IRA = IRA.new_ircfg() -G15_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAff(a, CST1)]]) -G15_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(r, a)]]) +G15_EXP_IRB0 = gen_irblock(LBL0, [[], [ExprAssign(a, CST1)]]) +G15_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, a)]]) for irb in [G15_EXP_IRB0, G15_EXP_IRB1]: G15_EXP_IRA.add_irblock(irb) @@ -531,10 +531,10 @@ for irb in [G15_EXP_IRB0, G15_EXP_IRB1]: G16_IRA = IRA.new_ircfg() -G16_IRB0 = gen_irblock(LBL0, [[ExprAff(a, CST1), ExprAff(b, CST2), - ExprAff(c, CST3)], [ExprAff(a, c+CST1), - ExprAff(b, c+CST2)]]) -G16_IRB1 = gen_irblock(LBL1, [[ExprAff(r, a+b)], [ExprAff(r, c+r)]]) +G16_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, CST1), ExprAssign(b, CST2), + ExprAssign(c, CST3)], [ExprAssign(a, c+CST1), + ExprAssign(b, c+CST2)]]) +G16_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, a+b)], [ExprAssign(r, c+r)]]) G16_IRB2 = gen_irblock(LBL2, [[]]) for irb in [G16_IRB0, G16_IRB1]: @@ -549,9 +549,9 @@ for irb in [G16_IRB0, G16_IRB1]: # Expected output for graph 1 G16_EXP_IRA = IRA.new_ircfg() -G16_EXP_IRB0 = gen_irblock(LBL0, [[ExprAff(c, CST3)], [ExprAff(a, c + CST1), - ExprAff(b, c + CST2)]]) -G16_EXP_IRB1 = gen_irblock(LBL1, [[ExprAff(r, a+b)], [ExprAff(r, c+r)]]) +G16_EXP_IRB0 = gen_irblock(LBL0, [[ExprAssign(c, CST3)], [ExprAssign(a, c + CST1), + ExprAssign(b, c + CST2)]]) +G16_EXP_IRB1 = gen_irblock(LBL1, [[ExprAssign(r, a+b)], [ExprAssign(r, c+r)]]) for irb in [G16_EXP_IRB0, G16_EXP_IRB1]: G16_EXP_IRA.add_irblock(irb) @@ -560,57 +560,57 @@ for irb in [G16_EXP_IRB0, G16_EXP_IRB1]: G17_IRA = IRA.new_ircfg() -G17_IRB0 = gen_irblock(LBL0, [[ExprAff(a, a*b), - ExprAff(b, c), - ExprAff(c, CST1)], +G17_IRB0 = gen_irblock(LBL0, [[ExprAssign(a, a*b), + ExprAssign(b, c), + ExprAssign(c, CST1)], - [ExprAff(d, d+ CST2)], + [ExprAssign(d, d+ CST2)], - [ExprAff(a, CST1), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST1), + ExprAssign(b, a), + ExprAssign(c, b)], - [ExprAff(ExprMem(d+CST1, 32), a), - ExprAff(a, b), - ExprAff(b, c), - ExprAff(c, CST1)], + [ExprAssign(ExprMem(d+CST1, 32), a), + ExprAssign(a, b), + ExprAssign(b, c), + ExprAssign(c, CST1)], - [ExprAff(a, CST1), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST1), + ExprAssign(b, a), + ExprAssign(c, b)], - [ExprAff(ExprMem(d+CST2, 32), a), - ExprAff(a, b), - ExprAff(b, c), - ExprAff(c, CST1)], + [ExprAssign(ExprMem(d+CST2, 32), a), + ExprAssign(a, b), + ExprAssign(b, c), + ExprAssign(c, CST1)], - [ExprAff(a, CST2), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST2), + ExprAssign(b, a), + ExprAssign(c, b)], - [ExprAff(a, a+CST1)], + [ExprAssign(a, a+CST1)], - [ExprAff(d, a), - ExprAff(a, d)], + [ExprAssign(d, a), + ExprAssign(a, d)], - [ExprAff(d, d+CST1)], + [ExprAssign(d, d+CST1)], - [ExprAff(a, CST2), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST2), + ExprAssign(b, a), + ExprAssign(c, b)], - [ExprAff(a, a+CST2)], + [ExprAssign(a, a+CST2)], - [ExprAff(a, CST2), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST2), + ExprAssign(b, a), + ExprAssign(c, b)], - [ExprAff(a, CST1), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST1), + ExprAssign(b, a), + ExprAssign(c, b)], - [ExprAff(ExprMem(d, 32), a+b+c)], + [ExprAssign(ExprMem(d, 32), a+b+c)], ]) @@ -624,34 +624,34 @@ G17_EXP_IRA = IRA.new_ircfg() G17_EXP_IRB0 = gen_irblock(LBL0, [[], - [ExprAff(d, d+ CST2)], + [ExprAssign(d, d+ CST2)], - [ExprAff(a, CST1)], + [ExprAssign(a, CST1)], - [ExprAff(ExprMem(d+CST1, 32), a)], + [ExprAssign(ExprMem(d+CST1, 32), a)], - [ExprAff(a, CST1)], + [ExprAssign(a, CST1)], - [ExprAff(ExprMem(d+CST2, 32), a)], + [ExprAssign(ExprMem(d+CST2, 32), a)], - [ExprAff(a, CST2)], + [ExprAssign(a, CST2)], - [ExprAff(a, a+CST1)], + [ExprAssign(a, a+CST1)], - [ExprAff(d, a)], + [ExprAssign(d, a)], - [ExprAff(d, d+CST1)], + [ExprAssign(d, d+CST1)], - [ExprAff(a, CST2)], + [ExprAssign(a, CST2)], - [ExprAff(a, a+CST2)], + [ExprAssign(a, a+CST2)], - [ExprAff(a, CST2), - ExprAff(b, a)], + [ExprAssign(a, CST2), + ExprAssign(b, a)], - [ExprAff(a, CST1), - ExprAff(b, a), - ExprAff(c, b)], + [ExprAssign(a, CST1), + ExprAssign(b, a), + ExprAssign(c, b)], G17_IRB0[14] # Trick because a+b+c != ((a+b)+c) diff --git a/test/analysis/depgraph.py b/test/analysis/depgraph.py index 2ba5f044..0d909ba2 100644 --- a/test/analysis/depgraph.py +++ b/test/analysis/depgraph.py @@ -1,5 +1,5 @@ """Regression test module for DependencyGraph""" -from miasm2.expression.expression import ExprId, ExprInt, ExprAff, ExprCond, \ +from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprCond, \ ExprLoc, LocKey from miasm2.core.locationdb import LocationDB from miasm2.ir.analysis import ira @@ -236,9 +236,9 @@ END = ExprId("END", IRDst.size) G1_IRA = IRA.new_ircfg() -G1_IRB0 = gen_irblock(LBL0, [[ExprAff(C, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G1_IRB1 = gen_irblock(LBL1, [[ExprAff(B, C), ExprAff(IRDst, ExprLoc(LBL2, 32))]]) -G1_IRB2 = gen_irblock(LBL2, [[ExprAff(A, B), ExprAff(IRDst, END)]]) +G1_IRB0 = gen_irblock(LBL0, [[ExprAssign(C, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G1_IRB1 = gen_irblock(LBL1, [[ExprAssign(B, C), ExprAssign(IRDst, ExprLoc(LBL2, 32))]]) +G1_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, B), ExprAssign(IRDst, END)]]) for irb in [G1_IRB0, G1_IRB1, G1_IRB2]: G1_IRA.add_irblock(irb) @@ -247,9 +247,9 @@ for irb in [G1_IRB0, G1_IRB1, G1_IRB2]: G2_IRA = IRA.new_ircfg() -G2_IRB0 = gen_irblock(LBL0, [[ExprAff(C, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G2_IRB1 = gen_irblock(LBL1, [[ExprAff(B, CST2), ExprAff(IRDst, ExprLoc(LBL2, 32))]]) -G2_IRB2 = gen_irblock(LBL2, [[ExprAff(A, B + C), ExprAff(IRDst, END)]]) +G2_IRB0 = gen_irblock(LBL0, [[ExprAssign(C, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G2_IRB1 = gen_irblock(LBL1, [[ExprAssign(B, CST2), ExprAssign(IRDst, ExprLoc(LBL2, 32))]]) +G2_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, B + C), ExprAssign(IRDst, END)]]) for irb in [G2_IRB0, G2_IRB1, G2_IRB2]: G2_IRA.add_irblock(irb) @@ -262,7 +262,7 @@ G3_IRA = IRA.new_ircfg() G3_IRB0 = gen_irblock( LBL0, [ - [ExprAff(C, CST1), ExprAff( + [ExprAssign(C, CST1), ExprAssign( IRDst, ExprCond( COND, ExprLoc(LBL1, 32), @@ -273,9 +273,9 @@ G3_IRB0 = gen_irblock( ] ) -G3_IRB1 = gen_irblock(LBL1, [[ExprAff(B, CST2), ExprAff(IRDst, ExprLoc(LBL3, 32))]]) -G3_IRB2 = gen_irblock(LBL2, [[ExprAff(B, CST3), ExprAff(IRDst, ExprLoc(LBL3, 32))]]) -G3_IRB3 = gen_irblock(LBL3, [[ExprAff(A, B + C), ExprAff(IRDst, END)]]) +G3_IRB1 = gen_irblock(LBL1, [[ExprAssign(B, CST2), ExprAssign(IRDst, ExprLoc(LBL3, 32))]]) +G3_IRB2 = gen_irblock(LBL2, [[ExprAssign(B, CST3), ExprAssign(IRDst, ExprLoc(LBL3, 32))]]) +G3_IRB3 = gen_irblock(LBL3, [[ExprAssign(A, B + C), ExprAssign(IRDst, END)]]) for irb in [G3_IRB0, G3_IRB1, G3_IRB2, G3_IRB3]: G3_IRA.add_irblock(irb) @@ -284,12 +284,12 @@ for irb in [G3_IRB0, G3_IRB1, G3_IRB2, G3_IRB3]: G4_IRA = IRA.new_ircfg() -G4_IRB0 = gen_irblock(LBL0, [[ExprAff(C, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G4_IRB0 = gen_irblock(LBL0, [[ExprAssign(C, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) G4_IRB1 = gen_irblock( LBL1, [ - [ExprAff(C, C + CST2)], - [ExprAff(IRDst, + [ExprAssign(C, C + CST2)], + [ExprAssign(IRDst, ExprCond( C, ExprLoc(LBL2, 32), @@ -298,7 +298,7 @@ G4_IRB1 = gen_irblock( ]] ) -G4_IRB2 = gen_irblock(LBL2, [[ExprAff(A, B), ExprAff(IRDst, END)]]) +G4_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, B), ExprAssign(IRDst, END)]]) for irb in [G4_IRB0, G4_IRB1, G4_IRB2]: G4_IRA.add_irblock(irb) @@ -308,12 +308,12 @@ for irb in [G4_IRB0, G4_IRB1, G4_IRB2]: G5_IRA = IRA.new_ircfg() -G5_IRB0 = gen_irblock(LBL0, [[ExprAff(B, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G5_IRB0 = gen_irblock(LBL0, [[ExprAssign(B, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) G5_IRB1 = gen_irblock( LBL1, [ - [ExprAff(B, B + CST2)], - [ExprAff( + [ExprAssign(B, B + CST2)], + [ExprAssign( IRDst, ExprCond( B, @@ -325,7 +325,7 @@ G5_IRB1 = gen_irblock( ] ) -G5_IRB2 = gen_irblock(LBL2, [[ExprAff(A, B), ExprAff(IRDst, END)]]) +G5_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, B), ExprAssign(IRDst, END)]]) for irb in [G5_IRB0, G5_IRB1, G5_IRB2]: G5_IRA.add_irblock(irb) @@ -334,8 +334,8 @@ for irb in [G5_IRB0, G5_IRB1, G5_IRB2]: G6_IRA = IRA.new_ircfg() -G6_IRB0 = gen_irblock(LBL0, [[ExprAff(B, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G6_IRB1 = gen_irblock(LBL1, [[ExprAff(A, B), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G6_IRB0 = gen_irblock(LBL0, [[ExprAssign(B, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G6_IRB1 = gen_irblock(LBL1, [[ExprAssign(A, B), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) for irb in [G6_IRB0, G6_IRB1]: G6_IRA.add_irblock(irb) @@ -344,13 +344,13 @@ for irb in [G6_IRB0, G6_IRB1]: G7_IRA = IRA.new_ircfg() -G7_IRB0 = gen_irblock(LBL0, [[ExprAff(C, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G7_IRB0 = gen_irblock(LBL0, [[ExprAssign(C, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) G7_IRB1 = gen_irblock( LBL1, [ - [ExprAff(B, C)], - [ExprAff(A, B)], - [ExprAff( + [ExprAssign(B, C)], + [ExprAssign(A, B)], + [ExprAssign( IRDst, ExprCond( COND, @@ -362,7 +362,7 @@ G7_IRB1 = gen_irblock( ] ) -G7_IRB2 = gen_irblock(LBL2, [[ExprAff(D, A), ExprAff(IRDst, END)]]) +G7_IRB2 = gen_irblock(LBL2, [[ExprAssign(D, A), ExprAssign(IRDst, END)]]) for irb in [G7_IRB0, G7_IRB1, G7_IRB2]: G7_IRA.add_irblock(irb) @@ -371,13 +371,13 @@ for irb in [G7_IRB0, G7_IRB1, G7_IRB2]: G8_IRA = IRA.new_ircfg() -G8_IRB0 = gen_irblock(LBL0, [[ExprAff(C, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G8_IRB0 = gen_irblock(LBL0, [[ExprAssign(C, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) G8_IRB1 = gen_irblock( LBL1, [ - [ExprAff(B, C)], - [ExprAff(C, D), - ExprAff( + [ExprAssign(B, C)], + [ExprAssign(C, D), + ExprAssign( IRDst, ExprCond( COND, @@ -388,7 +388,7 @@ G8_IRB1 = gen_irblock( ] ] ) -G8_IRB2 = gen_irblock(LBL2, [[ExprAff(A, B), ExprAff(IRDst, END)]]) +G8_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, B), ExprAssign(IRDst, END)]]) for irb in [G8_IRB0, G8_IRB1, G8_IRB2]: G8_IRA.add_irblock(irb) @@ -402,8 +402,8 @@ G10_IRA = IRA.new_ircfg() G10_IRB1 = gen_irblock( LBL1, [ - [ExprAff(B, B + CST2), - ExprAff( + [ExprAssign(B, B + CST2), + ExprAssign( IRDst, ExprCond( COND, @@ -415,7 +415,7 @@ G10_IRB1 = gen_irblock( ] ) -G10_IRB2 = gen_irblock(LBL2, [[ExprAff(A, B), ExprAff(IRDst, END)]]) +G10_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, B), ExprAssign(IRDst, END)]]) for irb in [G10_IRB1, G10_IRB2]: G10_IRA.add_irblock(irb) @@ -427,9 +427,9 @@ G11_IRA = IRA.new_ircfg() G11_IRB0 = gen_irblock( LBL0, [ - [ExprAff(A, CST1), - ExprAff(B, CST2), - ExprAff(IRDst, ExprLoc(LBL1, 32)) + [ExprAssign(A, CST1), + ExprAssign(B, CST2), + ExprAssign(IRDst, ExprLoc(LBL1, 32)) ] ] ) @@ -437,14 +437,14 @@ G11_IRB0 = gen_irblock( G11_IRB1 = gen_irblock( LBL1, [ - [ExprAff(A, B), - ExprAff(B, A), - ExprAff(IRDst, ExprLoc(LBL2, 32)) + [ExprAssign(A, B), + ExprAssign(B, A), + ExprAssign(IRDst, ExprLoc(LBL2, 32)) ] ] ) -G11_IRB2 = gen_irblock(LBL2, [[ExprAff(A, A - B), ExprAff(IRDst, END)]]) +G11_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, A - B), ExprAssign(IRDst, END)]]) for irb in [G11_IRB0, G11_IRB1, G11_IRB2]: G11_IRA.add_irblock(irb) @@ -453,13 +453,13 @@ for irb in [G11_IRB0, G11_IRB1, G11_IRB2]: G12_IRA = IRA.new_ircfg() -G12_IRB0 = gen_irblock(LBL0, [[ExprAff(B, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G12_IRB0 = gen_irblock(LBL0, [[ExprAssign(B, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) G12_IRB1 = gen_irblock( LBL1, [ - [ExprAff(A, B)], - [ExprAff(B, B + CST2), - ExprAff( + [ExprAssign(A, B)], + [ExprAssign(B, B + CST2), + ExprAssign( IRDst, ExprCond( COND, @@ -471,7 +471,7 @@ G12_IRB1 = gen_irblock( ] ) -G12_IRB2 = gen_irblock(LBL2, [[ExprAff(B, A), ExprAff(IRDst, END)]]) +G12_IRB2 = gen_irblock(LBL2, [[ExprAssign(B, A), ExprAssign(IRDst, END)]]) for irb in [G12_IRB0, G12_IRB1, G12_IRB2]: G12_IRA.add_irblock(irb) @@ -481,13 +481,13 @@ for irb in [G12_IRB0, G12_IRB1, G12_IRB2]: G13_IRA = IRA.new_ircfg() -G13_IRB0 = gen_irblock(LBL0, [[ExprAff(A, CST1)], - #[ExprAff(B, A)], - [ExprAff(IRDst, +G13_IRB0 = gen_irblock(LBL0, [[ExprAssign(A, CST1)], + #[ExprAssign(B, A)], + [ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) -G13_IRB1 = gen_irblock(LBL1, [[ExprAff(C, A)], - #[ExprAff(A, A + CST1)], - [ExprAff(IRDst, +G13_IRB1 = gen_irblock(LBL1, [[ExprAssign(C, A)], + #[ExprAssign(A, A + CST1)], + [ExprAssign(IRDst, ExprCond( R, ExprLoc(LBL2, 32), @@ -495,11 +495,11 @@ G13_IRB1 = gen_irblock(LBL1, [[ExprAff(C, A)], ) )]]) -G13_IRB2 = gen_irblock(LBL2, [[ExprAff(B, A + CST3)], [ExprAff(A, B + CST3)], - [ExprAff(IRDst, +G13_IRB2 = gen_irblock(LBL2, [[ExprAssign(B, A + CST3)], [ExprAssign(A, B + CST3)], + [ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) -G13_IRB3 = gen_irblock(LBL3, [[ExprAff(R, C), ExprAff(IRDst, END)]]) +G13_IRB3 = gen_irblock(LBL3, [[ExprAssign(R, C), ExprAssign(IRDst, END)]]) for irb in [G13_IRB0, G13_IRB1, G13_IRB2, G13_IRB3]: G13_IRA.add_irblock(irb) @@ -508,12 +508,12 @@ for irb in [G13_IRB0, G13_IRB1, G13_IRB2, G13_IRB3]: G14_IRA = IRA.new_ircfg() -G14_IRB0 = gen_irblock(LBL0, [[ExprAff(A, CST1)], - [ExprAff(IRDst, +G14_IRB0 = gen_irblock(LBL0, [[ExprAssign(A, CST1)], + [ExprAssign(IRDst, ExprLoc(LBL1, 32))] ]) -G14_IRB1 = gen_irblock(LBL1, [[ExprAff(B, A)], - [ExprAff(IRDst, +G14_IRB1 = gen_irblock(LBL1, [[ExprAssign(B, A)], + [ExprAssign(IRDst, ExprCond( C, ExprLoc(LBL2, 32), @@ -523,13 +523,13 @@ G14_IRB1 = gen_irblock(LBL1, [[ExprAff(B, A)], ] ]) -G14_IRB2 = gen_irblock(LBL2, [[ExprAff(D, A)], - [ExprAff(A, D + CST1)], - [ExprAff(IRDst, +G14_IRB2 = gen_irblock(LBL2, [[ExprAssign(D, A)], + [ExprAssign(A, D + CST1)], + [ExprAssign(IRDst, ExprLoc(LBL1, 32))] ]) -G14_IRB3 = gen_irblock(LBL3, [[ExprAff(R, D + B), ExprAff(IRDst, END)]]) +G14_IRB3 = gen_irblock(LBL3, [[ExprAssign(R, D + B), ExprAssign(IRDst, END)]]) for irb in [G14_IRB0, G14_IRB1, G14_IRB2, G14_IRB3]: G14_IRA.add_irblock(irb) @@ -538,18 +538,18 @@ for irb in [G14_IRB0, G14_IRB1, G14_IRB2, G14_IRB3]: G15_IRA = IRA.new_ircfg() -G15_IRB0 = gen_irblock(LBL0, [[ExprAff(A, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G15_IRB1 = gen_irblock(LBL1, [[ExprAff(D, A + B)], - [ExprAff(C, D)], - [ExprAff(B, C), - ExprAff(IRDst, +G15_IRB0 = gen_irblock(LBL0, [[ExprAssign(A, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G15_IRB1 = gen_irblock(LBL1, [[ExprAssign(D, A + B)], + [ExprAssign(C, D)], + [ExprAssign(B, C), + ExprAssign(IRDst, ExprCond( C, ExprLoc(LBL1, 32), ExprLoc(LBL2, 32) ) )]]) -G15_IRB2 = gen_irblock(LBL2, [[ExprAff(R, B), ExprAff(IRDst, END)]]) +G15_IRB2 = gen_irblock(LBL2, [[ExprAssign(R, B), ExprAssign(IRDst, END)]]) for irb in [G15_IRB0, G15_IRB1, G15_IRB2]: G15_IRA.add_irblock(irb) @@ -560,15 +560,15 @@ G16_IRA = IRA.new_ircfg() G16_IRB0 = gen_irblock( LBL0, [ - [ExprAff(A, CST1), ExprAff(IRDst, ExprLoc(LBL1, 32))] + [ExprAssign(A, CST1), ExprAssign(IRDst, ExprLoc(LBL1, 32))] ] ) G16_IRB1 = gen_irblock( LBL1, [ - [ExprAff(R, D), - ExprAff( + [ExprAssign(R, D), + ExprAssign( IRDst, ExprCond( C, @@ -590,10 +590,10 @@ G16_IRB1 = gen_irblock( -G16_IRB2 = gen_irblock(LBL2, [[ExprAff(D, A), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G16_IRB3 = gen_irblock(LBL3, [[ExprAff(R, D), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G16_IRB4 = gen_irblock(LBL4, [[ExprAff(R, A), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G16_IRB5 = gen_irblock(LBL5, [[ExprAff(R, A), ExprAff(IRDst, ExprLoc(LBL1, 32))]]) +G16_IRB2 = gen_irblock(LBL2, [[ExprAssign(D, A), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G16_IRB3 = gen_irblock(LBL3, [[ExprAssign(R, D), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G16_IRB4 = gen_irblock(LBL4, [[ExprAssign(R, A), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G16_IRB5 = gen_irblock(LBL5, [[ExprAssign(R, A), ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) for irb in [G16_IRB0, G16_IRB1, G16_IRB2, G16_IRB3, G16_IRB4, G16_IRB5]: G16_IRA.add_irblock(irb) @@ -602,14 +602,14 @@ for irb in [G16_IRB0, G16_IRB1, G16_IRB2, G16_IRB3, G16_IRB4, G16_IRB5]: G17_IRA = IRA.new_ircfg() -G17_IRB0 = gen_irblock(LBL0, [[ExprAff(A, CST1), - ExprAff(D, CST2), - ExprAff(IRDst, ExprLoc(LBL1, 32))]]) -G17_IRB1 = gen_irblock(LBL1, [[ExprAff(A, D), - ExprAff(B, D), - ExprAff(IRDst, ExprLoc(LBL2, 32))]]) -G17_IRB2 = gen_irblock(LBL2, [[ExprAff(A, A - B), - ExprAff(IRDst, END)]]) +G17_IRB0 = gen_irblock(LBL0, [[ExprAssign(A, CST1), + ExprAssign(D, CST2), + ExprAssign(IRDst, ExprLoc(LBL1, 32))]]) +G17_IRB1 = gen_irblock(LBL1, [[ExprAssign(A, D), + ExprAssign(B, D), + ExprAssign(IRDst, ExprLoc(LBL2, 32))]]) +G17_IRB2 = gen_irblock(LBL2, [[ExprAssign(A, A - B), + ExprAssign(IRDst, END)]]) G17_IRA.add_uniq_edge(G17_IRB0.loc_key, G17_IRB1.loc_key) G17_IRA.add_uniq_edge(G17_IRB1.loc_key, G17_IRB2.loc_key) diff --git a/test/arch/mep/ir/ut_helpers_ir.py b/test/arch/mep/ir/ut_helpers_ir.py index fcf31764..9c9efdfa 100644 --- a/test/arch/mep/ir/ut_helpers_ir.py +++ b/test/arch/mep/ir/ut_helpers_ir.py @@ -10,7 +10,7 @@ from miasm2.core.locationdb import LocationDB from miasm2.core.utils import Disasm_Exception from miasm2.ir.ir import AssignBlock from miasm2.arch.mep.ira import ir_a_mepb -from miasm2.expression.expression import ExprId, ExprInt, ExprOp, ExprMem, ExprAff, ExprLoc +from miasm2.expression.expression import ExprId, ExprInt, ExprOp, ExprMem, ExprAssign, ExprLoc def exec_instruction(mn_str, init_values, results, index=0, offset=0): @@ -36,7 +36,7 @@ def exec_instruction(mn_str, init_values, results, index=0, offset=0): iir, eiir = im.get_ir(instr) # Filter out IRDst - iir = [ir for ir in iir if not (isinstance(ir, ExprAff) and + iir = [ir for ir in iir if not (isinstance(ir, ExprAssign) and isinstance(ir.dst, ExprId) and ir.dst.name == "IRDst")] diff --git a/test/expression/expr_pickle.py b/test/expression/expr_pickle.py index 84ad0b9f..870f761a 100644 --- a/test/expression/expr_pickle.py +++ b/test/expression/expr_pickle.py @@ -1,5 +1,5 @@ import pickle -from miasm2.expression.expression import ExprInt, ExprAff, ExprId, \ +from miasm2.expression.expression import ExprInt, ExprAssign, ExprId, \ Expr, ExprCompose, ExprMem @@ -9,7 +9,7 @@ c = a + b d = ExprCompose(a, b) e = ExprMem(a, 32) f = a[:8] -aff = ExprAff(a, b) +aff = ExprAssign(a, b) print 'Pickling' diff --git a/test/expression/expression.py b/test/expression/expression.py index b998d4a5..1b39ab9f 100644 --- a/test/expression/expression.py +++ b/test/expression/expression.py @@ -61,12 +61,12 @@ for expr in [ A + cst1, ExprCompose(A, cst1), A.msb(), - ExprAff(A, cst1), + ExprAssign(A, cst1), ]: print repr(expr) assert expr == eval(repr(expr)) -aff = ExprAff(A[0:32], cst1) +aff = ExprAssign(A[0:32], cst1) assert aff.dst == A and aff.src == cst1 diff --git a/test/expression/parser.py b/test/expression/parser.py index 1d5889fb..ccae49b0 100644 --- a/test/expression/parser.py +++ b/test/expression/parser.py @@ -1,6 +1,6 @@ from miasm2.expression.parser import str_to_expr from miasm2.expression.expression import ExprInt, ExprId, ExprSlice, ExprMem, \ - ExprCond, ExprCompose, ExprOp, ExprAff, ExprLoc, LocKey + ExprCond, ExprCompose, ExprOp, ExprAssign, ExprLoc, LocKey for expr_test in [ExprInt(0x12, 32), ExprId('test', 32), @@ -10,7 +10,7 @@ for expr_test in [ExprInt(0x12, 32), ExprCond(ExprInt(0x10, 32), ExprInt(0x11, 32), ExprInt(0x12, 32)), ExprCompose(ExprInt(0x10, 16), ExprInt(0x11, 8), ExprInt(0x12, 8)), ExprInt(0x11, 8) + ExprInt(0x12, 8), - ExprAff(ExprId('EAX', 32), ExprInt(0x12, 32)), + ExprAssign(ExprId('EAX', 32), ExprInt(0x12, 32)), ]: print 'Test: %s' % expr_test diff --git a/test/expression/simplifications.py b/test/expression/simplifications.py index 046c948e..68dc0437 100644 --- a/test/expression/simplifications.py +++ b/test/expression/simplifications.py @@ -575,9 +575,9 @@ for test, res in match_tests: get_tests = [ - (ExprAff(ExprMem(a, 32), ExprMem(b, 32)).get_r(True), set([a, b, ExprMem(b, 32)])), - (ExprAff(ExprMem(a, 32), ExprMem(b, 32)).get_w(), set([ExprMem(a, 32)])), - (ExprAff(ExprMem(ExprMem(a, 32), 32), ExprMem(b, 32)) + (ExprAssign(ExprMem(a, 32), ExprMem(b, 32)).get_r(True), set([a, b, ExprMem(b, 32)])), + (ExprAssign(ExprMem(a, 32), ExprMem(b, 32)).get_w(), set([ExprMem(a, 32)])), + (ExprAssign(ExprMem(ExprMem(a, 32), 32), ExprMem(b, 32)) .get_r(True), set([a, b, ExprMem(b, 32), ExprMem(a, 32)])), ] diff --git a/test/ir/ir.py b/test/ir/ir.py index 3774e4e9..072c90f6 100644 --- a/test/ir/ir.py +++ b/test/ir/ir.py @@ -8,11 +8,11 @@ int0 = ExprInt(0, id_a.size) # Test AssignBlock ## Constructors -assignblk1 = AssignBlock([ExprAff(id_a, id_b)]) +assignblk1 = AssignBlock([ExprAssign(id_a, id_b)]) assignblk2 = AssignBlock({id_a: id_b}) ## Equality -assignblk1_bis = AssignBlock([ExprAff(id_a, id_b)]) +assignblk1_bis = AssignBlock([ExprAssign(id_a, id_b)]) assert assignblk1 == assignblk1_bis assert assignblk1 == assignblk2 diff --git a/test/ir/reduce_graph.py b/test/ir/reduce_graph.py index 68a3aea8..29a3501f 100644 --- a/test/ir/reduce_graph.py +++ b/test/ir/reduce_graph.py @@ -1,7 +1,7 @@ """Regression test module for DependencyGraph""" from pdb import pm -from miasm2.expression.expression import ExprId, ExprInt, ExprAff, ExprCond, \ +from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprCond, \ ExprLoc, LocKey from miasm2.core.locationdb import LocationDB @@ -109,8 +109,8 @@ G1_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(B, C), - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(B, C), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -119,7 +119,7 @@ G1_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(IRDst, ExprLoc(LBL2, 32)), + ExprAssign(IRDst, ExprLoc(LBL2, 32)), ] ] ) @@ -128,8 +128,8 @@ G1_IRB2 = gen_irblock( LBL2, [ [ - ExprAff(A, B), - ExprAff(IRDst, C), + ExprAssign(A, B), + ExprAssign(IRDst, C), ] ] ) @@ -144,11 +144,11 @@ G1_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(B, C), + ExprAssign(B, C), ], [ - ExprAff(A, B), - ExprAff(IRDst, C), + ExprAssign(A, B), + ExprAssign(IRDst, C), ] ] @@ -176,7 +176,7 @@ G2_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -185,8 +185,8 @@ G2_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(A, C), - ExprAff(IRDst, C), + ExprAssign(A, C), + ExprAssign(IRDst, C), ] ] ) @@ -202,8 +202,8 @@ G2_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), - ExprAff(IRDst, C), + ExprAssign(A, C), + ExprAssign(IRDst, C), ] ] ) @@ -222,7 +222,7 @@ G3_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -231,8 +231,8 @@ G3_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL2, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL2, 32)), ] ] ) @@ -241,8 +241,8 @@ G3_IRB2 = gen_irblock( LBL2, [ [ - ExprAff(D, A), - ExprAff(IRDst, C), + ExprAssign(D, A), + ExprAssign(IRDst, C), ] ] ) @@ -259,11 +259,11 @@ G3_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), + ExprAssign(A, C), ], [ - ExprAff(D, A), - ExprAff(IRDst, C), + ExprAssign(D, A), + ExprAssign(IRDst, C), ] ] ) @@ -284,7 +284,7 @@ G4_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -293,8 +293,8 @@ G4_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL2, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL2, 32)), ] ] ) @@ -303,8 +303,8 @@ G4_IRB2 = gen_irblock( LBL2, [ [ - ExprAff(D, A), - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(D, A), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -321,11 +321,11 @@ G4_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), + ExprAssign(A, C), ], [ - ExprAff(D, A), - ExprAff(IRDst, ExprLoc(LBL0, 32)), + ExprAssign(D, A), + ExprAssign(IRDst, ExprLoc(LBL0, 32)), ] ] ) @@ -345,7 +345,7 @@ G5_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -354,8 +354,8 @@ G5_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL2, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL2, 32)), ] ] ) @@ -364,8 +364,8 @@ G5_IRB2 = gen_irblock( LBL2, [ [ - ExprAff(D, A), - ExprAff(IRDst, ExprCond(C, ExprLoc(LBL1, 32), ExprLoc(LBL3, 32))), + ExprAssign(D, A), + ExprAssign(IRDst, ExprCond(C, ExprLoc(LBL1, 32), ExprLoc(LBL3, 32))), ] ] ) @@ -375,8 +375,8 @@ G5_IRB3 = gen_irblock( LBL3, [ [ - ExprAff(D, A), - ExprAff(IRDst, C), + ExprAssign(D, A), + ExprAssign(IRDst, C), ] ] ) @@ -393,11 +393,11 @@ G5_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), + ExprAssign(A, C), ], [ - ExprAff(D, A), - ExprAff(IRDst, ExprCond(C, ExprLoc(LBL0, 32), ExprLoc(LBL3, 32))), + ExprAssign(D, A), + ExprAssign(IRDst, ExprCond(C, ExprLoc(LBL0, 32), ExprLoc(LBL3, 32))), ] ] ) @@ -407,8 +407,8 @@ G5_RES_IRB3 = gen_irblock( LBL3, [ [ - ExprAff(D, A), - ExprAff(IRDst, C), + ExprAssign(D, A), + ExprAssign(IRDst, C), ] ] ) @@ -427,7 +427,7 @@ G6_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprCond(C, ExprLoc(LBL1, 32), ExprLoc(LBL2, 32))), + ExprAssign(IRDst, ExprCond(C, ExprLoc(LBL1, 32), ExprLoc(LBL2, 32))), ] ] ) @@ -436,7 +436,7 @@ G6_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(IRDst, ExprLoc(LBL3, 32)), + ExprAssign(IRDst, ExprLoc(LBL3, 32)), ] ] ) @@ -445,8 +445,8 @@ G6_IRB2 = gen_irblock( LBL2, [ [ - ExprAff(D, A), - ExprAff(IRDst, D), + ExprAssign(D, A), + ExprAssign(IRDst, D), ] ] ) @@ -456,8 +456,8 @@ G6_IRB3 = gen_irblock( LBL3, [ [ - ExprAff(A, D), - ExprAff(IRDst, ExprLoc(LBL3, 32)), + ExprAssign(A, D), + ExprAssign(IRDst, ExprLoc(LBL3, 32)), ] ] ) @@ -474,7 +474,7 @@ G6_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprCond(C, ExprLoc(LBL3, 32), ExprLoc(LBL2, 32))), + ExprAssign(IRDst, ExprCond(C, ExprLoc(LBL3, 32), ExprLoc(LBL2, 32))), ] ] ) @@ -484,8 +484,8 @@ G6_RES_IRB2 = gen_irblock( LBL2, [ [ - ExprAff(D, A), - ExprAff(IRDst, D), + ExprAssign(D, A), + ExprAssign(IRDst, D), ] ] ) @@ -495,8 +495,8 @@ G6_RES_IRB3 = gen_irblock( LBL3, [ [ - ExprAff(A, D), - ExprAff(IRDst, ExprLoc(LBL3, 32)), + ExprAssign(A, D), + ExprAssign(IRDst, ExprLoc(LBL3, 32)), ] ] ) @@ -517,8 +517,8 @@ G7_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -527,7 +527,7 @@ G7_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -546,8 +546,8 @@ G7_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -556,7 +556,7 @@ G7_RES_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -576,7 +576,7 @@ G8_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -585,8 +585,8 @@ G8_IRB1 = gen_irblock( LBL1, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL1, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL1, 32)), ] ] ) @@ -605,8 +605,8 @@ G8_RES_IRB0 = gen_irblock( LBL0, [ [ - ExprAff(A, C), - ExprAff(IRDst, ExprLoc(LBL0, 32)), + ExprAssign(A, C), + ExprAssign(IRDst, ExprLoc(LBL0, 32)), ] ] ) diff --git a/test/ir/symbexec.py b/test/ir/symbexec.py index 3158be60..00ef7c10 100755 --- a/test/ir/symbexec.py +++ b/test/ir/symbexec.py @@ -8,7 +8,7 @@ class TestSymbExec(unittest.TestCase): def test_ClassDef(self): from miasm2.expression.expression import ExprInt, ExprId, ExprMem, \ - ExprCompose, ExprAff + ExprCompose, ExprAssign from miasm2.arch.x86.sem import ir_x86_32 from miasm2.core.locationdb import LocationDB from miasm2.ir.symbexec import SymbolicExecutionEngine @@ -128,7 +128,7 @@ class TestSymbExec(unittest.TestCase): self.assertEqual(sb.eval_expr(id_x), id_a) ## x = a (with a = 0x0) - self.assertEqual(sb.eval_updt_expr(assignblk.dst2ExprAff(id_x)), ExprInt(0, 32)) + self.assertEqual(sb.eval_updt_expr(assignblk.dst2ExprAssign(id_x)), ExprInt(0, 32)) self.assertEqual(sb.eval_expr(id_x), ExprInt(0, 32)) self.assertEqual(sb.eval_updt_expr(id_x), ExprInt(0, 32)) @@ -137,7 +137,7 @@ class TestSymbExec(unittest.TestCase): ## state reads = set() for dst, src in sb.modified(): - reads.update(ExprAff(dst, src).get_r()) + reads.update(ExprAssign(dst, src).get_r()) self.assertEqual(reads, set([ id_x, id_a, diff --git a/test/ir/translators/smt2.py b/test/ir/translators/smt2.py index 838b0bc5..2b5c8df3 100644 --- a/test/ir/translators/smt2.py +++ b/test/ir/translators/smt2.py @@ -19,7 +19,7 @@ right = ExprCond(cond, a + ExprInt(0x64L, 64), ExprInt(0x16L, 64)) -e = ExprAff(left, right) +e = ExprAssign(left, right) # initialise translators t_z3 = TranslatorZ3() diff --git a/test/jitter/jitload.py b/test/jitter/jitload.py index dff1f0d6..1a56099f 100644 --- a/test/jitter/jitload.py +++ b/test/jitter/jitload.py @@ -3,7 +3,7 @@ from pdb import pm from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE from miasm2.analysis.machine import Machine -from miasm2.expression.expression import ExprId, ExprAff, ExprInt, ExprMem +from miasm2.expression.expression import ExprId, ExprAssign, ExprInt, ExprMem # Initial data: from 'example/samples/x86_32_sc.bin' data = "8d49048d5b0180f90174058d5bffeb038d5b0189d8c3".decode("hex") @@ -40,8 +40,8 @@ eax = ExprId("RAX", 64)[:32] imm0, imm4, imm4_64 = ExprInt(0, 32), ExprInt(4, 32), ExprInt(4, 64) memdata = ExprMem(ExprInt(run_addr, 32), len(data) * 8) assert myjit.eval_expr(eax) == imm0 -## Due to ExprAff construction, imm4 is "promoted" to imm4_64 -assert myjit.eval_expr(ExprAff(eax, imm4)) == imm4_64 +## Due to ExprAssign construction, imm4 is "promoted" to imm4_64 +assert myjit.eval_expr(ExprAssign(eax, imm4)) == imm4_64 assert myjit.eval_expr(eax) == imm4 ## Changes must be passed on myjit.cpu instance assert myjit.cpu.EAX == 4 |