Class SleighParserContext

  • All Implemented Interfaces:
    ParserContext

    public class SleighParserContext
    extends java.lang.Object
    implements ParserContext
    All the recovered context for a single instruction The main data structure is the tree of constructors and operands
    • Constructor Detail

      • SleighParserContext

        public SleighParserContext​(Address aAddr,
                                   Address nAddr,
                                   Address rAddr,
                                   Address dAddr)
        Constructor for building precompiled templates
        Parameters:
        aAddr - = address to which 'inst_start' resolves
        nAddr - = address to which 'inst_next' resolves
        rAddr - = special address associated with original call
        dAddr - = destination address of original call being replaced
      • SleighParserContext

        public SleighParserContext​(SleighParserContext origContext,
                                   int delayByteCount)
        Generate context specifically for an instruction that has a delayslot. When generating p-code SLEIGH has an alternate interpretation of the "inst_next" symbol that takes into account the instruction in the delay slot. This context is generated at the point when specific instruction(s) in the delay slot are known.
        Parameters:
        origContext - is the original context (for the instruction in isolation)
        delayByteCount - is the number of bytes in instruction stream occupied by the delay slot
    • Method Detail

      • getAddr

        public Address getAddr()
      • getNaddr

        public Address getNaddr()
      • getMemBuffer

        public MemBuffer getMemBuffer()
      • getInstructionBytes

        public int getInstructionBytes​(int offset,
                                       int bytestart,
                                       int size)
                                throws MemoryAccessException
        Get bytes from the instruction stream into an int (packed in big endian format). Uninitialized or undefined memory will return zero byte values.
        Parameters:
        offset - offset relative start of this context
        bytestart - pattern byte offset relative to specified context offset
        size - is the number of bytes to fetch
        Returns:
        requested byte-range value
        Throws:
        MemoryAccessException - if no bytes are available at first byte when (offset+bytestart==0).
      • getInstructionBits

        public int getInstructionBits​(int offset,
                                      int startbit,
                                      int size)
                               throws MemoryAccessException
        Get bits from the instruction stream into an int (packed in big endian format). Uninitialized or undefined memory will return zero bit values.
        Parameters:
        offset - offset relative start of this context
        startbit - is the index of the first bit to fetch
        size - is the number of bits to fetch
        Returns:
        requested bit-range value
        Throws:
        MemoryAccessException - if no bytes are available at first byte when (offset+bytestart/8==0).
      • getContextBytes

        public int getContextBytes​(int bytestart,
                                   int bytesize)
        Get bytes from context into an int
        Parameters:
        bytestart - is the index of the first byte to fetch
        bytesize - number of bytes (range: 1 - 4)
        Returns:
        the packed bytes from context
      • getContextBytes

        public int[] getContextBytes()
        Get full set of context bytes. Sleigh only supports context which is a multiple of 4-bytes (i.e., size of int)
        Returns:
        the array of context data
      • getContextBits

        public int getContextBits​(int startbit,
                                  int bitsize)
        Get bits from context into an int
        Parameters:
        startbit - is the index of the first bit to fetch
        bitsize - number of bits (range: 1 - 32)
        Returns:
        the packed bits
      • setContextWord

        public void setContextWord​(int i,
                                   int val,
                                   int mask)
      • isValid

        public boolean isValid​(MemBuffer buf)
      • getFlowRefAddr

        public Address getFlowRefAddr()
      • getFlowDestAddr

        public Address getFlowDestAddr()