Class ParserWalker
- java.lang.Object
-
- ghidra.app.plugin.processors.sleigh.ParserWalker
-
public class ParserWalker extends java.lang.ObjectClass 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
Constructors Constructor Description ParserWalker(SleighParserContext c)ParserWalker(SleighParserContext c, SleighParserContext cross)For use with pcode cross-build
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidallocateOperand()voidbaseState()Initialize a walk of the treevoidcalcCurrentLength(int minLength, int numopers)Calculate the length of the current constructor state assuming all its operands are constructedAddressgetAddr()ConstructorgetConstructor()AddressSpacegetConstSpace()intgetContextBits(int startbit, int size)intgetContextBytes(int byteoff, int numbytes)intgetCurrentLength()java.lang.StringgetCurrentSubtableName()AddressSpacegetCurSpace()FixedHandlegetFixedHandle(int i)AddressgetFlowDestAddr()AddressgetFlowRefAddr()intgetInstructionBits(int startbit, int size)intgetInstructionBytes(int byteoff, int numbytes)AddressgetNaddr()intgetOffset(int i)Get the offset into the instruction for the current node (i=-1) or one of the current node's childrenintgetOperand()Find the next child that needs to be traversedFixedHandlegetParentHandle()SleighParserContextgetParserContext()ConstructStategetState()booleanisState()Are we at the end of the tree walkvoidpopOperand()Move to the parent of the current nodevoidpushOperand(int i)Move down to a particular child of the current node.voidsetConstructor(Constructor ct)voidsetCurrentLength(int len)voidsetOffset(int off)voidsetOutOfBandState(Constructor ct, int index, ConstructState tempstate, ParserWalker otherwalker)voidsnippetState()Create state suitable for parsing a just a p-code semantics snippetvoidsubTreeState(ConstructState subtree)
-
-
-
Constructor Detail
-
ParserWalker
public ParserWalker(SleighParserContext c)
-
ParserWalker
public ParserWalker(SleighParserContext c, SleighParserContext cross)
For use with pcode cross-build- Parameters:
c-nextAddr-
-
-
Method Detail
-
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()
-
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 java.lang.String getCurrentSubtableName()
-
-