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
-
-