コード例 #1
0
ファイル: javavm.py プロジェクト: twizmwazin/angr
    def get_default_value_by_type(type_, state=None):
        """
        Java specify defaults values for primitive and reference types. This
        method returns the default value for a given type.

        :param str type_:   Name of type.
        :return:            Default value for this type.
        """
        if type_ in ['byte', 'char', 'short', 'int', 'boolean']:
            return BVS('default_value_{}'.format(type_), 32)
        elif type_ == "long":
            return BVS('default_value_{}'.format(type_), 64)
        elif type_ == 'float':
            return FPS('default_value_{}'.format(type_), FSORT_FLOAT)
        elif type_ == 'double':
            return FPS('default_value_{}'.format(type_), FSORT_DOUBLE)
        elif state is not None:
            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
            elif type_.endswith('[]'):
                array = SimSootExpr_NewArray.new_array(state, type_[:-2], BVV(2, 32))
                return array
            else:
                return SimSootValue_ThisRef.new_object(state, type_, symbolic=True, init_object=False)
        else:
            # not a primitive type
            # => treat it as a reference
            return SootNullConstant()
コード例 #2
0
ファイル: javavm.py プロジェクト: shingarov/angr
 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)
コード例 #3
0
 def run(self, this):  # pylint: disable=arguments-differ,unused-argument
     str_ref = SimSootValue_StringRef(self.state.memory.get_new_uuid())
     self.state.memory.store(str_ref, StringS("scanner_return", 100))
     # save reference in global dict, so we can easily access it later
     try:
         self.state.globals['java.util.Scanner'].append(str_ref)
     except KeyError:
         self.state.globals['java.util.Scanner'] = [str_ref]
     return str_ref
コード例 #4
0
ファイル: javavm.py プロジェクト: twizmwazin/angr
 def generate_symbolic_cmd_line_arg(state, max_length=1000):
     """
     Generates a new symbolic cmd line argument string.
     :return: The string reference.
     """
     str_ref = SimSootValue_StringRef(state.memory.get_new_uuid())
     str_sym = StringS("cmd_line_arg", max_length)
     state.solver.add(str_sym != StringV(""))
     state.memory.store(str_ref, str_sym)
     return str_ref