Class ParserWalker

java.lang.Object
ghidra.app.plugin.processors.sleigh.ParserWalker

public class ParserWalker extends Object
Class for walking the Sleigh Parser tree. The nodes of the tree are the Sleigh Constructors arranged for a particular instruction. This tree is walked for various purposes:
  • SleighInstructionPrototype.resolve - initial parsing of instruction and building the tree
  • SleighInstructionPrototype.resolveHandles - filling in Varnode values for all the Constructor exports
  • PcodeEmit - for weaving together p-code for an instruction
  • Constructor Details

  • Method Details

    • getParserContext

      public SleighParserContext getParserContext()
    • baseState

      public void baseState()
      Initialize a walk of the tree
    • subTreeState

      public void subTreeState(ConstructState subtree)
    • snippetState

      public void snippetState()
      Create state suitable for parsing a just a p-code semantics snippet
    • isState

      public boolean isState()
      Are we at the end of the tree walk
      Returns:
      true if there is more walk to go
    • getState

      public ConstructState getState()
    • pushOperand

      public void pushOperand(int i)
      Move down to a particular child of the current node. Store what would be the next sibling to walk
      Parameters:
      i - is the index of the desired child
    • allocateOperand

      public void allocateOperand() throws UnknownInstructionException
      Throws:
      UnknownInstructionException
    • popOperand

      public void popOperand()
      Move to the parent of the current node
    • getOperand

      public int getOperand()
      Find the next child that needs to be traversed
      Returns:
      the index of the child
    • getFixedHandle

      public FixedHandle getFixedHandle(int i)
    • getParentHandle

      public FixedHandle getParentHandle()
    • getOffset

      public int getOffset(int i)
      Get the offset into the instruction for the current node (i=-1) or one of the current node's children
      Parameters:
      i - selects the desired child of the current node
      Returns:
      the offset (in bytes) for the selected node
    • setOffset

      public void setOffset(int off)
    • getCurrentLength

      public int getCurrentLength()
    • setCurrentLength

      public void setCurrentLength(int len)
    • calcCurrentLength

      public void calcCurrentLength(int minLength, int numopers)
      Calculate the length of the current constructor state assuming all its operands are constructed
    • getConstructor

      public Constructor getConstructor()
      Returns:
      the Constructor for the current node in the walk
    • setConstructor

      public void setConstructor(Constructor ct)
    • getAddr

      public Address getAddr()
    • getNaddr

      public Address getNaddr()
    • getN2addr

      public Address getN2addr()
    • getCurSpace

      public AddressSpace getCurSpace()
    • getConstSpace

      public AddressSpace getConstSpace()
    • getFlowRefAddr

      public Address getFlowRefAddr()
    • getFlowDestAddr

      public Address getFlowDestAddr()
    • getInstructionBytes

      public int getInstructionBytes(int byteoff, int numbytes) throws MemoryAccessException
      Throws:
      MemoryAccessException
    • getContextBytes

      public int getContextBytes(int byteoff, int numbytes)
    • getInstructionBits

      public int getInstructionBits(int startbit, int size) throws MemoryAccessException
      Throws:
      MemoryAccessException
    • getContextBits

      public int getContextBits(int startbit, int size)
    • setOutOfBandState

      public void setOutOfBandState(Constructor ct, int index, ConstructState tempstate, ParserWalker otherwalker)
    • getCurrentSubtableName

      public String getCurrentSubtableName()