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
ConstructorDescriptionFor use with pcode cross-build -
Method Summary
Modifier and TypeMethodDescriptionvoid
void
Initialize a walk of the treevoid
calcCurrentLength
(int minLength, int numopers) Calculate the length of the current constructor state assuming all its operands are constructedgetAddr()
int
getContextBits
(int startbit, int size) int
getContextBytes
(int byteoff, int numbytes) int
getFixedHandle
(int i) int
getInstructionBits
(int startbit, int size) int
getInstructionBytes
(int byteoff, int numbytes) getNaddr()
int
getOffset
(int i) Get the offset into the instruction for the current node (i=-1) or one of the current node's childrenint
Find the next child that needs to be traversedgetState()
boolean
isState()
Are we at the end of the tree walkvoid
Move to the parent of the current nodevoid
pushOperand
(int i) Move down to a particular child of the current node.void
void
setCurrentLength
(int len) void
setOffset
(int off) void
setOutOfBandState
(Constructor ct, int index, ConstructState tempstate, ParserWalker otherwalker) void
Create state suitable for parsing a just a p-code semantics snippetvoid
subTreeState
(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
-