Пример #1
0
 def sdiv_(self, global_state):
     s0, s1 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate)
     if s1 == 0:
         global_state.mstate.stack.append(BitVecVal(0, 256))
     else:
         global_state.mstate.stack.append(s0 / s1)
     return [global_state]
Пример #2
0
 def div_(self, global_state):
     op0, op1 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate)
     if op1 == 0:
         global_state.mstate.stack.append(BitVecVal(0, 256))
     else:
         global_state.mstate.stack.append(UDiv(op0, op1))
     return [global_state]
Пример #3
0
    def exp_(self, global_state):
        state = global_state.mstate

        base, exponent = util.pop_bitvec(state), util.pop_bitvec(state)
        if (type(base) != BitVecNumRef) or (type(exponent) != BitVecNumRef):
            state.stack.append(BitVec("(" + str(simplify(base)) + ")**(" + str(simplify(exponent)) + ")", 256))
        else:
            state.stack.append(pow(base.as_long(), exponent.as_long(), 2**256))

        return [global_state]
Пример #4
0
    def exp_(self, global_state):
        state = global_state.mstate
        # we only implement 2 ** x
        base, exponent = util.pop_bitvec(state), util.pop_bitvec(state)

        if (type(base) != BitVecNumRef) or (type(exponent) != BitVecNumRef):
            state.stack.append(BitVec("(" + str(simplify(base)) + ")^(" + str(simplify(exponent)) + ")", 256))
        elif base.as_long() == 2:
            if exponent.as_long() == 0:
                state.stack.append(BitVecVal(1, 256))
            else:
                state.stack.append(base << (exponent - 1))
        else:
            state.stack.append(base)
        return [global_state]
Пример #5
0
    def sgt_(self, global_state):
        state = global_state.mstate

        exp = util.pop_bitvec(state) > util.pop_bitvec(state)
        state.stack.append(exp)
        return [global_state]
Пример #6
0
 def gt_(self, global_state):
     state = global_state.mstate
     exp = UGT(util.pop_bitvec(state), util.pop_bitvec(state))
     state.stack.append(exp)
     return [global_state]
Пример #7
0
 def mulmod_(self, global_state):
     s0, s1, s2 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(
         global_state.mstate), util.pop_bitvec(global_state.mstate)
     global_state.mstate.stack.append((s0 * s1) % s2 if s2 else 0)
Пример #8
0
 def addmod_(self, global_state):
     s0, s1, s2 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(
         global_state.mstate), util.pop_bitvec(global_state.mstate)
     global_state.mstate.stack.append((s0 + s1) % s2)
     return [global_state]
Пример #9
0
 def smod_(self, global_state):
     s0, s1 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(
         global_state.mstate)
     global_state.mstate.stack.append(0 if s1 == 0 else s0 % s1)
     return [global_state]
Пример #10
0
 def sdiv_(self, global_state):
     s0, s1 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(
         global_state.mstate)
     global_state.mstate.stack.append(s0 / s1)
     return [global_state]
Пример #11
0
 def div_(self, global_state):
     global_state.mstate.stack.append(
         UDiv(util.pop_bitvec(global_state.mstate),
              util.pop_bitvec(global_state.mstate)))
     return [global_state]
Пример #12
0
 def mul_(self, global_state):
     global_state.mstate.stack.append(
         (helper.pop_bitvec(global_state.mstate) *
          helper.pop_bitvec(global_state.mstate)))
     return [global_state]
Пример #13
0
 def mulmod_(self, global_state):
     s0, s1, s2 = util.pop_bitvec(global_state.mstate), util.pop_bitvec(global_state.mstate), util.pop_bitvec(
         global_state.mstate)
     global_state.mstate.stack.append(URem(URem(s0, s2) * URem(s1, s2), s2))
     return [global_state]