Class SleighParserContext
- java.lang.Object
-
- ghidra.app.plugin.processors.sleigh.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 Summary
Constructors Constructor Description SleighParserContext(SleighParserContext origContext, int delayByteCount)Generate context specifically for an instruction that has a delayslot.SleighParserContext(Address aAddr, Address nAddr, Address rAddr, Address dAddr)Constructor for building precompiled templatesSleighParserContext(MemBuffer memBuf, SleighInstructionPrototype prototype, ProcessorContextView processorContext)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddCommit(ConstructState point, TripleSymbol sym, int num, int mask)voidapplyCommits(ProcessorContext ctx)AddressgetAddr()AddressSpacegetConstSpace()intgetContextBits(int startbit, int bitsize)Get bits from context into an intint[]getContextBytes()Get full set of context bytes.intgetContextBytes(int bytestart, int bytesize)Get bytes from context into an intAddressSpacegetCurSpace()FixedHandlegetFixedHandle(ConstructState constructState)AddressgetFlowDestAddr()AddressgetFlowRefAddr()intgetInstructionBits(int offset, int startbit, int size)Get bits from the instruction stream into an int (packed in big endian format).intgetInstructionBytes(int offset, int bytestart, int size)Get bytes from the instruction stream into an int (packed in big endian format).MemBuffergetMemBuffer()AddressgetNaddr()SleighInstructionPrototypegetPrototype()booleanisValid(MemBuffer buf)voidsetContextWord(int i, int val, int mask)
-
-
-
Constructor Detail
-
SleighParserContext
public SleighParserContext(MemBuffer memBuf, SleighInstructionPrototype prototype, ProcessorContextView processorContext)
-
SleighParserContext
public SleighParserContext(Address aAddr, Address nAddr, Address rAddr, Address dAddr)
Constructor for building precompiled templates- Parameters:
aAddr- = address to which 'inst_start' resolvesnAddr- = address to which 'inst_next' resolvesrAddr- = special address associated with original calldAddr- = 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
-
getPrototype
public SleighInstructionPrototype getPrototype()
- Specified by:
getPrototypein interfaceParserContext
-
addCommit
public void addCommit(ConstructState point, TripleSymbol sym, int num, int mask)
-
applyCommits
public void applyCommits(ProcessorContext ctx) throws MemoryAccessException
- Throws:
MemoryAccessException
-
getFixedHandle
public FixedHandle getFixedHandle(ConstructState constructState)
-
getAddr
public Address getAddr()
-
getNaddr
public Address getNaddr()
-
getCurSpace
public AddressSpace getCurSpace()
-
getConstSpace
public AddressSpace getConstSpace()
-
getMemBuffer
public MemBuffer getMemBuffer()
-
getInstructionBytes
public int getInstructionBytes(int offset, int bytestart, int size) throws MemoryAccessExceptionGet 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 contextbytestart- pattern byte offset relative to specified context offsetsize- 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 MemoryAccessExceptionGet 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 contextstartbit- is the index of the first bit to fetchsize- 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 fetchbytesize- 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 fetchbitsize- 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()
-
-