Пример #1
0
getting the z3 solver results back as :class:`cas.mapper.mapper`
instances.
"""

from amoco.logger import Log

logger = Log(__name__)
logger.debug("loading module")

from .expressions import *
from amoco.cas.mapper import mapper

try:
    import z3
except ImportError:
    logger.verbose("z3 package not found => solve() method is not implemented")

    class solver(object):
        def __init__(self, eqns=None, tactics=None, timeout=None):
            raise NotImplementedError

    has_solver = False
else:
    logger.verbose("z3 package imported")

    class solver(object):
        """
        Wrapper of z3.Solver which allows to convert boolean expressions
        to their z3 bitvector-based forms and ultimately convert back a z3
        *model* into an amoco :class:`mapper` instance.
Пример #2
0
from amoco.config import conf

from amoco.logger import Log

logger = Log(__name__)
logger.debug("loading module")

import re

try:
    from pygments.token import Token
    from pygments.style import Style
    from pygments.lexer import RegexLexer
    from pygments.formatters import *
except ImportError:
    logger.verbose("pygments package not found, no renderer defined")
    has_pygments = False

    # metaclass definition, with a syntax compatible with python2 and python3
    class TokenType(type):
        def __getattr__(cls, key):
            return key

    Token_base = TokenType("Token_base", (), {})

    class Token(Token_base):
        pass

    class NullFormatter(object):
        def __init__(self, **options):
            self.options = options
Пример #3
0
    def read_data(self,vaddr,size):
        return self.mmap.read(vaddr,size)

    def read_instruction(self,vaddr,**kargs):
        if self.cpu is None:
            logger.error('no cpu imported')
            raise ValueError
        maxlen = self.cpu.disassemble.maxlen
        try:
            istr = self.mmap.read(vaddr,maxlen)
        except MemoryError,e:
            logger.verbose("vaddr %s is not mapped"%vaddr)
            raise MemoryError(e)
        else:
            if len(istr)<=0 or not isinstance(istr[0],str):
                logger.verbose("failed to read instruction at %s"%vaddr)
                return None
        i = self.cpu.disassemble(istr[0],**kargs)
        if i is None:
            logger.warning("disassemble failed at vaddr %s"%vaddr)
            return None
        else:
            i.address = vaddr
            return i

    # optional codehelper method allows platform-specific analysis of
    # either a (raw) list of instruction, a block/func object (see amoco.code)
    # the default helper is a no-op:
    def codehelper(self,seq=None,block=None,func=None):
        if seq is not None: return seq
        if block is not None: return block
Пример #4
0
    def read_data(self, vaddr, size):
        return self.mmap.read(vaddr, size)

    def read_instruction(self, vaddr, **kargs):
        if self.cpu is None:
            logger.error('no cpu imported')
            raise ValueError
        maxlen = self.cpu.disassemble.maxlen
        try:
            istr = self.mmap.read(vaddr, maxlen)
        except MemoryError, e:
            logger.verbose("vaddr %s is not mapped" % vaddr)
            raise MemoryError(e)
        else:
            if len(istr) <= 0 or not isinstance(istr[0], str):
                logger.verbose("failed to read instruction at %s" % vaddr)
                return None
        i = self.cpu.disassemble(istr[0], **kargs)
        if i is None:
            logger.warning("disassemble failed at vaddr %s" % vaddr)
            return None
        else:
            i.address = vaddr
            return i

    # optional codehelper method allows platform-specific analysis of
    # either a (raw) list of instruction, a block/func object (see amoco.code)
    # the default helper is a no-op:
    def codehelper(self, seq=None, block=None, func=None):
        if seq is not None: return seq
        if block is not None: return block