'Initialize a blank state.
All parameters are optional.
:param addr:            The execution start address.
:param initial_prefix:
:param stack_size:      The number of bytes to allocate for stack space
:return:                The initialized SimState.
Any additional arguments will be passed to the SimState constructor'

def state_blank(self, addr=None, initial_prefix=None, stack_size=((1024 * 1024) * 8), **kwargs):

    if (kwargs.get('mode', None) is None):
        kwargs['mode'] = self.project._default_analysis_mode
    if (kwargs.get('permissions_backer', None) is None):
        permission_map = {}
        for obj in self.project.loader.all_objects:
            for seg in obj.segments:
                perms = 0
                if seg.is_readable:
                    perms |= 1
                if seg.is_writable:
                    perms |= 2
                if seg.is_executable:
                    perms |= 4
                permission_map[(seg.min_addr, seg.max_addr)] = perms
        permissions_backer = (self.project.loader.main_object.execstack, permission_map)
        kwargs['permissions_backer'] = permissions_backer
    if (kwargs.get('memory_backer', None) is None):
        kwargs['memory_backer'] = self.project.loader.memory
    if (kwargs.get('os_name', None) is None):
        kwargs['os_name'] = self.name
    state = SimState(self.project, **kwargs)
    stack_end = state.arch.initial_sp
    if (o.ABSTRACT_MEMORY not in state.options):
        state.memory.mem._preapproved_stack = IRange((stack_end - stack_size), stack_end)
    if (o.INITIALIZE_ZERO_REGISTERS in state.options):
        (highest_reg_offset, reg_size) = max(state.arch.registers.values())
        for i in range(0, (highest_reg_offset + reg_size), state.arch.bytes):
            state.registers.store(i, state.se.BVV(0, state.arch.bits))
    if hasattr(state.regs, 'sp'):
        state.regs.sp = stack_end
    if (initial_prefix is not None):
        for reg in state.arch.default_symbolic_registers:
            state.registers.store(reg, claripy.BVS(((initial_prefix + '_') + reg), state.arch.bits, explicit_name=True))
    for (reg, val, is_addr, mem_region) in state.arch.default_register_values:
        region_base = None
        if is_addr:
            if isinstance(mem_region, tuple):
                (mem_region, region_base) = mem_region
            elif (mem_region == 'global'):
                region_base = 0
            else:
                raise AngrSimOSError(('You    must    specify    the    base    address    for    memory    region    "%s".    ' % mem_region))
        if ((o.ABSTRACT_MEMORY in state.options) and is_addr):
            address = claripy.ValueSet(state.arch.bits, mem_region, region_base, val)
            state.registers.store(reg, address)
        else:
            state.registers.store(reg, val)
    if (addr is None):
        addr = self.project.entry
    state.regs.ip = addr
    state.scratch.ins_addr = addr
    state.scratch.bbl_addr = addr
    state.scratch.stmt_idx = 0
    state.history.jumpkind = 'Ijk_Boring'
    return state
