本文整理汇总了Python中angr.sim_state.SimState类的典型用法代码示例。如果您正苦于以下问题:Python SimState类的具体用法?Python SimState怎么用?Python SimState使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SimState类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: register_default
def register_default(cls, name, xtr=None):
if cls is SimStatePlugin:
if once('simstateplugin_register_default deprecation'):
l.critical("SimStatePlugin.register_default(name, cls) is deprecated, please use SimState.register_default(name)")
from angr.sim_state import SimState
SimState.register_default(name, xtr)
else:
if xtr is cls:
if once('simstateplugin_register_default deprecation case 2'):
l.critical("SimStatePlugin.register_default(name, cls) is deprecated, please use cls.register_default(name)")
xtr = None
from angr.sim_state import SimState
SimState.register_default(name, cls, xtr if xtr is not None else 'default')
示例2: copy
@SimStatePlugin.memo
def copy(self, memo): # pylint: disable=unused-argument
return SimUCManager(man=self)
def get_alloc_depth(self, addr):
block_pos = (addr - self._region_base) // self._region_size
if block_pos not in self._alloc_depth_map:
return None
return self._alloc_depth_map[block_pos]
def is_bounded(self, ast):
"""
Test whether an AST is bounded by any existing constraint in the related solver.
:param ast: an claripy.AST object
:return: True if there is at least one related constraint, False otherwise
"""
return len(ast.variables.intersection(self.state.solver._solver.variables)) != 0
def set_state(self, state):
super(SimUCManager, self).set_state(state)
self._region_base = 0xd0 << (self.state.arch.bits - 8)
from angr.sim_state import SimState
SimState.register_default('uc_manager', SimUCManager)
示例3: __delitem__
self._backer[k] = v
def __delitem__(self, k):
del self._backer[k]
def __contains__(self, k):
return k in self._backer
def keys(self):
return self._backer.keys()
def values(self):
return self._backer.values()
def items(self):
return self._backer.items()
def get(self, k, alt=None):
return self._backer.get(k, alt)
def pop(self, k, alt=None):
return self._backer.pop(k, alt)
@SimStatePlugin.memo
def copy(self, memo): # pylint: disable=unused-argument
return SimStateGlobals(dict(self._backer))
from angr.sim_state import SimState
SimState.register_default('globals', SimStateGlobals)
示例4: defaultdict
# 0x10868: add r2, r0, r1 -> part B of the logic for all iterations is put in the loop header
# ...
# 0x10898: ldr r3, [r7, #20]
# 0x1089a: cmp r3, #3
# 0x1089c: ble 0x10818 -> the back edge
#
# And yes, another example for the latter case is a do-while loop!
SimStatePlugin.__init__(self)
self.back_edge_trip_counts = defaultdict(list) if back_edge_trip_counts is None else back_edge_trip_counts
self.header_trip_counts = defaultdict(list) if header_trip_counts is None else header_trip_counts
self.current_loop = [] if current_loop is None else current_loop
def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
l.warning("Merging is not implemented for loop data!")
return False
def widen(self, others): # pylint: disable=unused-argument
l.warning("Widening is not implemented for loop data!")
return False
@SimStatePlugin.memo
def copy(self, memo): # pylint: disable=unused-argument
return SimStateLoopData(back_edge_trip_counts=copy.deepcopy(self.back_edge_trip_counts),
header_trip_counts=copy.deepcopy(self.header_trip_counts),
current_loop=list(self.current_loop))
from angr.sim_state import SimState
SimState.register_default('loop_data', SimStateLoopData)
示例5: isinstance
return self._solver.simplify()
elif isinstance(e, (int, float, bool)):
return e
elif isinstance(e, claripy.ast.Base) and e.op in claripy.operations.leaf_operations_concrete:
return e
elif isinstance(e, SimActionObject) and e.op in claripy.operations.leaf_operations_concrete:
return e.ast
elif not isinstance(e, (SimActionObject, claripy.ast.Base)):
return e
else:
return self._claripy_simplify(e)
@timed_function
@ast_stripping_decorator
@error_converter
def _claripy_simplify(self, *args): #pylint:disable=no-self-use
return claripy.simplify(args[0])
def variables(self, e): #pylint:disable=no-self-use
"""
Returns the symbolic variables present in the AST of `e`.
"""
return e.variables
from angr.sim_state import SimState
SimState.register_default('solver', SimSolver)
from .. import sim_options as o
from .inspect import BP_AFTER
from ..errors import SimValueError, SimUnsatError, SimSolverModeError, SimSolverOptionError
示例6: SimKeyValueMemory
import logging
from ..storage import SimKVStore
from .plugin import SimStatePlugin
l = logging.getLogger("angr.state_plugins.keyvalue_memory")
class SimKeyValueMemory(SimKVStore): # pylint: disable=abstract-method
def __init__(self, memory_id, store=None):
super(SimKeyValueMemory, self).__init__(store)
self.memory_id = memory_id
@SimStatePlugin.memo
def copy(self, memo): # pylint: disable=unused-argument,arguments-differ
return SimKeyValueMemory(memory_id=self.memory_id,
store=self._store.copy())
from angr.sim_state import SimState
SimState.register_default('keyvalue_memory', SimKeyValueMemory)
示例7: copy
def copy(self, memo): # pylint: disable=unused-argument
return SimStateLog(log=self)
def _combine(self, others):
all_events = [ e.events for e in itertools.chain([self], others) ]
self.events = [ SimEvent(self.state, 'merge', event_lists=all_events) ]
return False
def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
return self._combine(others)
def widen(self, others):
return self._combine(others)
def clear(self):
s = self.state
self.__init__()
self.state = s
#self.events = [ ]
#self.temps.clear()
#self.used_variables.clear()
#self.input_variables.clear()
from ..errors import SimEventError
from .sim_event import SimEvent
from .sim_action import SimAction, SimActionConstraint
from angr.sim_state import SimState
SimState.register_default('log', SimStateLog)
示例8: LambdaAttrIter
class LambdaAttrIter(TreeIter):
def __init__(self, start, f, **kwargs):
TreeIter.__init__(self, start, **kwargs)
self._f = f
def __reversed__(self):
for hist in self._iter_nodes():
a = self._f(hist)
if a is not None:
yield a
class LambdaIterIter(LambdaAttrIter):
def __init__(self, start, f, reverse=True, **kwargs):
LambdaAttrIter.__init__(self, start, f, **kwargs)
self._f = f
self._reverse = reverse
def __reversed__(self):
for hist in self._iter_nodes():
for a in reversed(self._f(hist)) if self._reverse else self._f(hist):
yield a
from angr.sim_state import SimState
SimState.register_default('history', SimStateHistory)
from .sim_action import SimAction, SimActionConstraint
from .sim_event import SimEvent
示例9: hasattr
>>> self.state.inspect(xxxxxx, attr0=yyyy, attr1=zzzz)
>>> # Get new attributes out of SimInspect in case they are modified by the user
>>> new_attr0 = self.state._inspect.attr0
>>> new_attr1 = self.state._inspect.attr1
>>> # Remove them from SimInspect
>>> self.state._inspect.downsize()
"""
for k in inspect_attributes:
if hasattr(self, k):
setattr(self, k, None)
def _combine(self, others):
for t in event_types:
seen = { id(e) for e in self._breakpoints[t] }
for o in others:
for b in o._breakpoints[t]:
if id(b) not in seen:
self._breakpoints[t].append(b)
seen.add(id(b))
return False
def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
return self._combine(others)
def widen(self, others):
return self._combine(others)
from angr.sim_state import SimState
SimState.register_default('inspect', SimInspector)
示例10: was_written_to
:param length: length in bytes of region to map, will be rounded upwards to the page size
"""
l.warning('unmap_region() is not yet supported by SimAbstractMmeory.')
return
def was_written_to(self, dst):
if type(dst) in (int, long):
dst = self.state.se.BVV(dst, self.state.arch.bits)
addrs = self._normalize_address_type(dst)
for region, addr in addrs:
address_wrapper = self._normalize_address(region, addr.min)
return self.regions[address_wrapper.region].was_written_to(address_wrapper.address)
return False
def dbg_print(self):
"""
Print out debugging information
"""
for region_id, region in self.regions.items():
print "Region [%s]:" % region_id
region.dbg_print(indent=2)
from angr.sim_state import SimState
SimState.register_default('abs_memory', SimAbstractMemory)
示例11: ValueError
if self._type is None:
raise ValueError("Trying to store to location without specifying type")
return self._type.store(self.state, self._addr, value)
class StructMode(object):
def __init__(self, view):
self._view = view
def __dir__(self):
return [x[7:] for x in SimMemView.types if x.startswith('struct ')]
def __getattr__(self, k):
assert k != '_view'
return self._view._deeper(ty=SimMemView.types['struct ' + k].with_arch(self._view.state.arch))
def __setattr__(self, k, v):
if k == '_view':
object.__setattr__(self, k, v)
else:
self.__getattr__(k).store(v)
from ..sim_type import ALL_TYPES, SimTypeFixedSizeArray, SimTypePointer
SimMemView.types = ALL_TYPES # identity purposefully here
from angr.sim_state import SimState
SimState.register_default('mem', SimMemView)
SimState.register_default('regs', SimRegNameView)
示例12: dumps
:param path: file path as string
:param kwargs: passed to state.se.eval
:return: file contents as string
"""
return self.state.fs.get(path).concretize(**kwargs)
def dumps(self, fd, **kwargs):
"""
Returns the concrete content for a file descriptor.
BACKWARD COMPATIBILITY: if you ask for file descriptors 0 1 or 2, it will return the data from stdin, stdout,
or stderr as a flat string.
:param fd: A file descriptor.
:return: The concrete content.
:rtype: str
"""
if 0 <= fd <= 2:
data = [self.stdin, self.stdout, self.stderr][fd].concretize(**kwargs)
if type(data) is list:
data = ''.join(data)
return data
return self.get_fd(fd).concretize(**kwargs)
from angr.sim_state import SimState
SimState.register_default('posix', SimSystemPosix)
from ..errors import SimPosixError, SimSolverError, SimMergeError
示例13: add_sinkhole
max_pair = (addr, sz)
break
if max_pair is None:
return None
remaining = max_pair[1] - length
max_addr = max_pair[0] + remaining
max_length = remaining
self.sinkholes.remove(max_pair)
if remaining:
self.sinkholes.add((max_pair[0], max_length))
return max_addr
def add_sinkhole(self, address, length):
"""
Add a sinkhole.
Allow the possibility for the program to reuse the memory represented by the
address length pair.
"""
self.sinkholes.add((address, length))
from angr.sim_state import SimState
SimState.register_default('cgc', SimStateCGC)
示例14: copy
self.state.history.add_event(r)
else:
action_holder.append(r)
self.state._inspect('tmp_write', BP_AFTER)
@SimStatePlugin.memo
def copy(self, memo): # pylint: disable=unused-argument
return SimStateScratch(scratch=self)
def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
return False
def widen(self, others): # pylint: disable=unused-argument
return False
def clear(self):
s = self.state
j = self.jumpkind
self.__init__()
self.state = s
self.jumpkind = j # preserve jumpkind - "what is the previous jumpkind" is an important question sometimes
from .sim_action import SimActionObject, SimActionData
from ..errors import SimValueError
from .. import sim_options as o
from .inspect import BP_AFTER, BP_BEFORE
from angr.sim_state import SimState
SimState.register_default('scratch', SimStateScratch)
示例15: copy
if self.state.solver.eval(ptr) != 0:
v = self.state.memory.load(ptr, size_int)
self.state.memory.store(addr, v)
return addr
@SimStatePlugin.memo
def copy(self, memo):# pylint: disable=unused-argument
c = SimHeapBrk(heap_base=self.heap_base, heap_size=self.heap_size)
c.heap_location = self.heap_location
c.mmap_base = self.mmap_base
return c
def _combine(self, others):
new_heap_location = max(o.heap_location for o in others)
if self.heap_location != new_heap_location:
self.heap_location = new_heap_location
return True
else:
return False
def merge(self, others, merge_conditions, common_ancestor=None): #pylint:disable=unused-argument
return self._combine(others)
def widen(self, others):
return self._combine(others)
from angr.sim_state import SimState
SimState.register_default('heap', SimHeapBrk)