Package ghidra.program.model.lang
Class InjectPayloadSleigh
- java.lang.Object
 - 
- ghidra.program.model.lang.InjectPayloadSleigh
 
 
- 
- All Implemented Interfaces:
 InjectPayload
- Direct Known Subclasses:
 InjectPayloadCallfixup,InjectPayloadCallother,InjectPayloadJumpAssist,InjectPayloadSegment
public class InjectPayloadSleigh extends java.lang.Object implements InjectPayload
InjectPayloadSleighdefines an InjectPayload of p-code which is defined via a String passed to the sleigh compiler 
- 
- 
Nested Class Summary
- 
Nested classes/interfaces inherited from interface ghidra.program.model.lang.InjectPayload
InjectPayload.InjectParameter 
 - 
 
- 
Field Summary
Fields Modifier and Type Field Description protected java.lang.Stringnameprotected java.lang.Stringsourceprotected inttype- 
Fields inherited from interface ghidra.program.model.lang.InjectPayload
CALLFIXUP_TYPE, CALLMECHANISM_TYPE, CALLOTHERFIXUP_TYPE, EXECUTABLEPCODE_TYPE 
 - 
 
- 
Constructor Summary
Constructors Modifier Constructor Description protectedInjectPayloadSleigh(ConstructTpl pcode, int tp, java.lang.String nm)Constructor for a dummy payload, given just a nameprotectedInjectPayloadSleigh(ConstructTpl pcode, InjectPayloadSleigh failedPayload)Constructor for partial clone of another payload whose p-code failed to parseprotectedInjectPayloadSleigh(java.lang.String sourceName)Constructor for use where restoreXml is overridden and provides name and typeInjectPayloadSleigh(java.lang.String nm, int tp, java.lang.String sourceName)Provide basic form, restoreXml fills in the rest 
- 
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanequals(java.lang.Object obj)static ConstructTplgetDummyPcode(AddressFactory addrFactory)Build a dummy p-code sequence to use in place of a normal parsed payload.InjectPayload.InjectParameter[]getInput()java.lang.StringgetName()InjectPayload.InjectParameter[]getOutput()intgetParamShift()PcodeOp[]getPcode(Program program, InjectContext con)A convenience function wrapping the inject method, to produce the final set of PcodeOp objects in an arrayjava.lang.StringgetSource()intgetType()inthashCode()voidinject(InjectContext context, PcodeEmit emit)Given a context, send the p-code payload to the emitterbooleanisErrorPlaceholder()If parsing a payload (from XML) fails, a placeholder payload may be substituted and this method returns true for the substitute.booleanisFallThru()booleanisIncidentalCopy()protected voidorderParameters()All input and output parameters must have a unique index.voidrestoreXml(XmlPullParser parser, SleighLanguage language)Restore the payload from an XML stream.voidsaveXml(java.lang.StringBuilder buffer)Write out configuration parameters as a \XML tag protected voidsetInputParameters(java.util.List<InjectPayload.InjectParameter> in)protected voidsetOutputParameters(java.util.List<InjectPayload.InjectParameter> out)protected voidsetTemplate(ConstructTpl ctl) 
 - 
 
- 
- 
Constructor Detail
- 
InjectPayloadSleigh
protected InjectPayloadSleigh(ConstructTpl pcode, InjectPayloadSleigh failedPayload)
Constructor for partial clone of another payload whose p-code failed to parse- Parameters:
 pcode- is substitute p-code to replace the failed parsefailedPayload- is the failed payload
 
- 
InjectPayloadSleigh
protected InjectPayloadSleigh(ConstructTpl pcode, int tp, java.lang.String nm)
Constructor for a dummy payload, given just a name- Parameters:
 pcode- is the dummy p-code sequencetp- is the type of injectionnm- is the name of the injection
 
- 
InjectPayloadSleigh
protected InjectPayloadSleigh(java.lang.String sourceName)
Constructor for use where restoreXml is overridden and provides name and type- Parameters:
 sourceName- is string describing the source of this payload
 
- 
InjectPayloadSleigh
public InjectPayloadSleigh(java.lang.String nm, int tp, java.lang.String sourceName)Provide basic form, restoreXml fills in the rest- Parameters:
 nm- must provide formal nametp- must provide typesourceName- is a description of the source of this payload
 
 - 
 
- 
Method Detail
- 
getName
public java.lang.String getName()
- Specified by:
 getNamein interfaceInjectPayload- Returns:
 - formal name for this injection
 
 
- 
getType
public int getType()
- Specified by:
 getTypein interfaceInjectPayload- Returns:
 - the type of this injection: CALLFIXUP_TYPE, CALLMECHANISM_TYPE, etc.
 
 
- 
getSource
public java.lang.String getSource()
- Specified by:
 getSourcein interfaceInjectPayload- Returns:
 - a String describing the source of this payload
 
 
- 
getParamShift
public int getParamShift()
- Specified by:
 getParamShiftin interfaceInjectPayload- Returns:
 - number of parameters from the original call which should be truncated
 
 
- 
setInputParameters
protected void setInputParameters(java.util.List<InjectPayload.InjectParameter> in)
 
- 
setOutputParameters
protected void setOutputParameters(java.util.List<InjectPayload.InjectParameter> out)
 
- 
getInput
public InjectPayload.InjectParameter[] getInput()
- Specified by:
 getInputin interfaceInjectPayload- Returns:
 - array of any input parameters for this inject
 
 
- 
getOutput
public InjectPayload.InjectParameter[] getOutput()
- Specified by:
 getOutputin interfaceInjectPayload- Returns:
 - array of any output parameters for this inject
 
 
- 
isErrorPlaceholder
public boolean isErrorPlaceholder()
Description copied from interface:InjectPayloadIf parsing a payload (from XML) fails, a placeholder payload may be substituted and this method returns true for the substitute. In all other cases, this returns false.- Specified by:
 isErrorPlaceholderin interfaceInjectPayload- Returns:
 - true if this is a placeholder for a payload with parse errors.
 
 
- 
inject
public void inject(InjectContext context, PcodeEmit emit)
Description copied from interface:InjectPayloadGiven a context, send the p-code payload to the emitter- Specified by:
 injectin interfaceInjectPayload- Parameters:
 context- is the context for injectionemit- is the object accumulating the final p-code
 
- 
getPcode
public PcodeOp[] getPcode(Program program, InjectContext con)
Description copied from interface:InjectPayloadA convenience function wrapping the inject method, to produce the final set of PcodeOp objects in an array- Specified by:
 getPcodein interfaceInjectPayload- Parameters:
 program- is the Program for which injection is happeningcon- is the context for injection- Returns:
 - the array of PcodeOps
 
 
- 
isFallThru
public boolean isFallThru()
- Specified by:
 isFallThruin interfaceInjectPayload- Returns:
 - true if the injected p-code falls thru
 
 
- 
isIncidentalCopy
public boolean isIncidentalCopy()
- Specified by:
 isIncidentalCopyin interfaceInjectPayload- Returns:
 - true if this inject's COPY operations should be treated as incidental
 
 
- 
orderParameters
protected void orderParameters()
All input and output parameters must have a unique index. Order them so that inputs come first, then outputs 
- 
saveXml
public void saveXml(java.lang.StringBuilder buffer)
Description copied from interface:InjectPayloadWrite out configuration parameters as a \XML tag - Specified by:
 saveXmlin interfaceInjectPayload- Parameters:
 buffer- is the stream to write to
 
- 
restoreXml
public void restoreXml(XmlPullParser parser, SleighLanguage language) throws XmlParseException
Description copied from interface:InjectPayloadRestore the payload from an XML stream. The root expected document is the \tag, which may be wrapped with another tag by the derived class. - Specified by:
 restoreXmlin interfaceInjectPayload- Parameters:
 parser- is the XML streamlanguage- is used to resolve registers and address spaces- Throws:
 XmlParseException- for badly formed XML
 
- 
setTemplate
protected void setTemplate(ConstructTpl ctl)
 
- 
equals
public boolean equals(java.lang.Object obj)
- Overrides:
 equalsin classjava.lang.Object
 
- 
hashCode
public int hashCode()
- Overrides:
 hashCodein classjava.lang.Object
 
- 
getDummyPcode
public static ConstructTpl getDummyPcode(AddressFactory addrFactory)
Build a dummy p-code sequence to use in place of a normal parsed payload. A ConstructTpl is built out of Varnode and PcodeOp templates that can be assigned directly to the pcodeTemplate field of the payload. The sequence itself is non-empty, consisting of a single operation: tmp = tmp + 0;- Parameters:
 addrFactory- is used to construct temp and constant Varnodes- Returns:
 - the final dummy template
 
 
 - 
 
 -