Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def set_value(self, state, value, endness=None, **kwargs): # pylint:disable=arguments-differ
# TODO: This code needs to be reworked for variable byte with and the Third Endness
self.check_value(value)
if endness is None: endness = state.arch.memory_endness
if isinstance(value, int):
value = claripy.BVV(value, self.size*state.arch.byte_width)
elif isinstance(value, float):
if self.size not in (4, 8):
raise ValueError("What do I do with a float %d bytes long" % self.size)
value = claripy.FPV(value, claripy.FSORT_FLOAT if self.size == 4 else claripy.FSORT_DOUBLE)
cur = 0
for loc in reversed(self.locations):
loc.set_value(state, value[cur*state.arch.byte_width + loc.size*state.arch.byte_width - 1:cur*state.arch.byte_width], endness=endness, **kwargs)
cur += loc.size
val = state.solver.BVV(arg, ty.size if check else state.arch.bits)
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed
return val
elif isinstance(arg, float):
sort = claripy.FSORT_FLOAT
if check:
if isinstance(ty, SimTypeDouble):
sort = claripy.FSORT_DOUBLE
elif isinstance(ty, SimTypeFloat):
pass
else:
raise TypeError("Type mismatch: expectd %s, got float" % ty.name)
else:
sort = claripy.FSORT_DOUBLE if state.arch.bits == 64 else claripy.FSORT_FLOAT
val = claripy.fpToIEEEBV(claripy.FPV(arg, sort))
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed # pylint: disable=no-member
return val
elif isinstance(arg, claripy.ast.FP):
val = claripy.fpToIEEEBV(arg)
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed # pylint: disable=no-member
return val
elif isinstance(arg, claripy.ast.Base):
endswap = False
bypass_sizecheck = False
if check:
def value(ty, val):
if ty == 'Ity_F32':
return claripy.FPV(float(val), claripy.FSORT_FLOAT)
elif ty == 'Ity_F64':
return claripy.FPV(float(val), claripy.FSORT_DOUBLE)
else:
return claripy.BVV(int(val), pyvex.get_type_size(ty))
return claripy.Concat(*[SimCC._standardize_value(sarg, None, state, alloc) for sarg in arg])
elif isinstance(arg, int):
if check and isinstance(ty, SimTypeFloat):
return SimCC._standardize_value(float(arg), ty, state, alloc)
val = state.solver.BVV(arg, ty.size if check else state.arch.bits)
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed
return val
elif isinstance(arg, float):
sort = claripy.FSORT_FLOAT
if check:
if isinstance(ty, SimTypeDouble):
sort = claripy.FSORT_DOUBLE
elif isinstance(ty, SimTypeFloat):
pass
else:
raise TypeError("Type mismatch: expectd %s, got float" % ty.name)
else:
sort = claripy.FSORT_DOUBLE if state.arch.bits == 64 else claripy.FSORT_FLOAT
val = claripy.fpToIEEEBV(claripy.FPV(arg, sort))
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed # pylint: disable=no-member
return val
elif isinstance(arg, claripy.ast.FP):
val = claripy.fpToIEEEBV(arg)
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed # pylint: disable=no-member
def set_value(self, state, val, size=None, endness=None, **kwargs): # pylint:disable=arguments-differ
if size == 4:
if state.arch.register_endness == 'IEnd_LE' and endness == 'IEnd_BE':
# pylint: disable=no-member
val = claripy.fpToFP(claripy.fp.RM.RM_NearestTiesEven, val.reversed.raw_to_fp(), claripy.FSORT_DOUBLE).reversed
else:
val = claripy.fpToFP(claripy.fp.RM.RM_NearestTiesEven, val.raw_to_fp(), claripy.FSORT_DOUBLE)
if endness and endness != state.arch.register_endness:
val = val.reversed
setattr(state.regs, self.reg_name, val)
#super(SimLyingRegArg, self).set_value(state, val, endness=endness, **kwargs)
def _execute(self):
self.expr = self.state.solver.FPV(self.expr.value, FSORT_DOUBLE)
def set_value(self, state, val, size=None, endness=None, **kwargs): # pylint:disable=arguments-differ
if size == 4:
if state.arch.register_endness == 'IEnd_LE' and endness == 'IEnd_BE':
# pylint: disable=no-member
val = claripy.fpToFP(claripy.fp.RM.RM_NearestTiesEven, val.reversed.raw_to_fp(), claripy.FSORT_DOUBLE).reversed
else:
val = claripy.fpToFP(claripy.fp.RM.RM_NearestTiesEven, val.raw_to_fp(), claripy.FSORT_DOUBLE)
if endness and endness != state.arch.register_endness:
val = val.reversed
setattr(state.regs, self.reg_name, val)
#super(SimLyingRegArg, self).set_value(state, val, endness=endness, **kwargs)
def symbol(ty, name):
if ty == 'Ity_F32':
return claripy.FPS(name, claripy.FSORT_FLOAT)
elif ty == 'Ity_F64':
return claripy.FPS(name, claripy.FSORT_DOUBLE)
else:
return claripy.BVS(name, pyvex.get_type_size(ty))
return claripy.Concat(*[SimCC._standardize_value(sarg, None, state, alloc) for sarg in arg])
elif isinstance(arg, (int, long)):
if check and isinstance(ty, s_type.SimTypeFloat):
return SimCC._standardize_value(float(arg), ty, state, alloc)
val = state.se.BVV(arg, ty.size if check else state.arch.bits)
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed
return val
elif isinstance(arg, float):
sort = claripy.FSORT_FLOAT
if check:
if isinstance(ty, s_type.SimTypeDouble):
sort = claripy.FSORT_DOUBLE
elif isinstance(ty, s_type.SimTypeFloat):
pass
else:
raise TypeError("Type mismatch: expectd %s, got float" % ty.name)
else:
sort = claripy.FSORT_DOUBLE if state.arch.bits == 64 else claripy.FSORT_FLOAT
val = claripy.fpToIEEEBV(claripy.FPV(arg, sort))
if state.arch.memory_endness == 'Iend_LE':
val = val.reversed # pylint: disable=no-member
return val
elif isinstance(arg, claripy.ast.Base):
# yikes
if state.arch.memory_endness == 'Iend_LE' and arg.length == state.arch.bits:
arg = arg.reversed
def _get_default_symbolic_value_by_type(type_, state):
if type_ in ['byte', 'char', 'short', 'int', 'boolean']:
return BVS('default_value_{}'.format(type_), 32)
if type_ == "long":
return BVS('default_value_{}'.format(type_), 64)
if type_ == 'float':
return FPS('default_value_{}'.format(type_), FSORT_FLOAT)
if type_ == 'double':
return FPS('default_value_{}'.format(type_), FSORT_DOUBLE)
if type_ == 'java.lang.String':
return SimSootValue_StringRef.new_string(state, StringS('default_value_{}'.format(type_), 1000))
if type_.endswith('[][]'):
raise NotImplementedError
# multiarray = SimSootExpr_NewMultiArray.new_array(self.state, element_type, size)
# multiarray.add_default_value_generator(lambda s: SimSootExpr_NewMultiArray._generate_inner_array(s, element_type, sizes))
# return multiarray
if type_.endswith('[]'):
array = SimSootExpr_NewArray.new_array(state, type_[:-2], BVV(2, 32))
return array
return SimSootValue_ThisRef.new_object(state, type_, symbolic=True, init_object=False)