Пример #1
0
        private void Translate_Sub_Ovf(CflowStack stack, Instruction instr)
        {
            var val2 = stack.Pop();
            var val1 = stack.Pop();

            if (val1 is BitVecExpr && val2 is BitVecExpr)
            {
                stack.Push((BitVecExpr)ctx.MkITE(ctx.MkBVSubNoUnderflow(val1 as BitVecExpr, val2 as BitVecExpr, true), ctx.MkBVSub(val1 as BitVecExpr, val2 as BitVecExpr), stack.Unknown() as BitVecExpr));
            }
            else
            {
                stack.PushUnknown();
            }
        }
Пример #2
0
        private void Translate_Mul_Ovf_Un(CflowStack stack, Instruction instr)
        {
            var val2 = stack.Pop();
            var val1 = stack.Pop();

            if (val1 is BitVecExpr && val2 is BitVecExpr)
            {
                stack.Push((BitVecExpr)ctx.MkITE(ctx.MkBVMulNoOverflow(val1 as BitVecExpr, val2 as BitVecExpr, false), ctx.MkBVMul(val1 as BitVecExpr, val2 as BitVecExpr), stack.Unknown() as BitVecExpr));
            }
            else
            {
                stack.PushUnknown();
            }
        }
Пример #3
0
 private BitVecExpr GetUnknownLocal(CflowStack stack)
 {
     return(stack.Unknown() as BitVecExpr);
 }