示例#1
0
def do_F2I(op, stack, state):
    prev_type = state.esil["type"]
    state.esil["type"] = FLOAT

    val, = pop_values(stack, state)
    stack.append(z3.fpToUBV(FPM, val, z3.BitVecSort(SIZE)))

    state.esil["type"] = prev_type
示例#2
0
def _fptoui(term, smt):
    v = smt.eval(term.arg)
    src = smt.type(term.arg)
    tgt = smt.type(term)

    # TODO: don't generate trivial conds
    return smt._conditional_conv_value([0 <= v, v <= (2**tgt.width) - 1],
                                       z3.fpToUBV(z3.RTZ(), v, _ty_sort(tgt)),
                                       term.name)
示例#3
0
def _fptoui(term, smt):
  v = smt.eval(term.arg)
  src = smt.type(term.arg)
  tgt = smt.type(term)

  # TODO: don't generate trivial conds
  return smt._conditional_conv_value(
    [0 <= v, v <= (2**tgt.width)-1],
    z3.fpToUBV(z3.RTZ(), v, _ty_sort(tgt)),
    term.name)
示例#4
0
def do_I2F(op, stack, state):
    val, = pop_values(stack, state)

    if z3.is_bv_value(val):
        fp = z3.FPVal(val.as_long(), FSIZE)
    else:
        fp = z3.FP("fp%d" % float_data["count"], FSIZE)
        state.solver.add(z3.fpToUBV(FPM, fp, z3.BitVecSort(SIZE)) == val)
        float_data["count"] += 1

    stack.append(fp)
示例#5
0
 def _op_raw_fpToUBV(self, rm, fp, bv_len):
     return z3.fpToUBV(rm, fp, z3.BitVecSort(bv_len, ctx=self._context))
示例#6
0
 def _op_raw_fpToUBV(self, rm, fp, bv_len):
     return z3.fpToUBV(rm, fp, z3.BitVecSort(bv_len, ctx=self._context))
示例#7
0
 def fpToUBV(rm, fp, bv_len):
     return z3.fpToUBV(rm, fp, z3.BitVecSort(bv_len))
示例#8
0
def _fptoui(term, smt):
  x = smt.eval(term._args[0])
  tgt = smt.type(term)

  return z3.fpToUBV(z3.RTZ(), x, _ty_sort(tgt))
示例#9
0
def _fptoui(term, smt):
    x = smt.eval(term._args[0])
    tgt = smt.type(term)

    return z3.fpToUBV(z3.RTZ(), x, _ty_sort(tgt))