Class ParserWalker
java.lang.Object
ghidra.app.plugin.processors.sleigh.ParserWalker
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 Summary
ConstructorsConstructorDescriptionFor use with pcode cross-build -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidInitialize a walk of the treevoidcalcCurrentLength(int minLength, int numopers) Calculate the length of the current constructor state assuming all its operands are constructedgetAddr()intgetContextBits(int startbit, int size) intgetContextBytes(int byteoff, int numbytes) intgetFixedHandle(int i) intgetInstructionBits(int startbit, int size) intgetInstructionBytes(int byteoff, int numbytes) getNaddr()intgetOffset(int i) Get the offset into the instruction for the current node (i=-1) or one of the current node's childrenintFind the next child that needs to be traversedgetState()booleanisState()Are we at the end of the tree walkvoidMove to the parent of the current nodevoidpushOperand(int i) Move down to a particular child of the current node.voidvoidsetCurrentLength(int len) voidsetOffset(int off) voidsetOutOfBandState(Constructor ct, int index, ConstructState tempstate, ParserWalker otherwalker) voidCreate state suitable for parsing a just a p-code semantics snippetvoidsubTreeState(ConstructState subtree)
-
Constructor Details
-
ParserWalker
-
ParserWalker
For use with pcode cross-build- Parameters:
c- contextcross- cross context
-
-
Method Details
-
getParserContext
-
baseState
public void baseState()Initialize a walk of the tree -
subTreeState
-
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
-
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
- 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
-
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
- Returns:
- the Constructor for the current node in the walk
-
setConstructor
-
getAddr
-
getNaddr
-
getN2addr
-
getCurSpace
-
getConstSpace
-
getFlowRefAddr
-
getFlowDestAddr
-
getInstructionBytes
- Throws:
MemoryAccessException
-
getContextBytes
public int getContextBytes(int byteoff, int numbytes) -
getInstructionBits
- Throws:
MemoryAccessException
-
getContextBits
public int getContextBits(int startbit, int size) -
setOutOfBandState
public void setOutOfBandState(Constructor ct, int index, ConstructState tempstate, ParserWalker otherwalker) -
getCurrentSubtableName
-