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
InjectPayloadSleigh
defines 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.String
name
protected java.lang.String
source
protected int
type
-
Fields inherited from interface ghidra.program.model.lang.InjectPayload
CALLFIXUP_TYPE, CALLMECHANISM_TYPE, CALLOTHERFIXUP_TYPE, EXECUTABLEPCODE_TYPE
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
InjectPayloadSleigh(ConstructTpl pcode, int tp, java.lang.String nm)
Constructor for a dummy payload, given just a nameprotected
InjectPayloadSleigh(ConstructTpl pcode, InjectPayloadSleigh failedPayload)
Constructor for partial clone of another payload whose p-code failed to parseprotected
InjectPayloadSleigh(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 boolean
equals(java.lang.Object obj)
static ConstructTpl
getDummyPcode(AddressFactory addrFactory)
Build a dummy p-code sequence to use in place of a normal parsed payload.InjectPayload.InjectParameter[]
getInput()
java.lang.String
getName()
InjectPayload.InjectParameter[]
getOutput()
int
getParamShift()
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.String
getSource()
int
getType()
int
hashCode()
void
inject(InjectContext context, PcodeEmit emit)
Given a context, send the p-code payload to the emitterboolean
isErrorPlaceholder()
If parsing a payload (from XML) fails, a placeholder payload may be substituted and this method returns true for the substitute.boolean
isFallThru()
boolean
isIncidentalCopy()
protected void
orderParameters()
All input and output parameters must have a unique index.void
restoreXml(XmlPullParser parser, SleighLanguage language)
Restore the payload from an XML stream.void
saveXml(java.lang.StringBuilder buffer)
Write out configuration parameters as a \XML tag protected void
setInputParameters(java.util.List<InjectPayload.InjectParameter> in)
protected void
setOutputParameters(java.util.List<InjectPayload.InjectParameter> out)
protected void
setTemplate(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:
getName
in interfaceInjectPayload
- Returns:
- formal name for this injection
-
getType
public int getType()
- Specified by:
getType
in interfaceInjectPayload
- Returns:
- the type of this injection: CALLFIXUP_TYPE, CALLMECHANISM_TYPE, etc.
-
getSource
public java.lang.String getSource()
- Specified by:
getSource
in interfaceInjectPayload
- Returns:
- a String describing the source of this payload
-
getParamShift
public int getParamShift()
- Specified by:
getParamShift
in 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:
getInput
in interfaceInjectPayload
- Returns:
- array of any input parameters for this inject
-
getOutput
public InjectPayload.InjectParameter[] getOutput()
- Specified by:
getOutput
in interfaceInjectPayload
- Returns:
- array of any output parameters for this inject
-
isErrorPlaceholder
public boolean isErrorPlaceholder()
Description copied from interface:InjectPayload
If 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:
isErrorPlaceholder
in 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:InjectPayload
Given a context, send the p-code payload to the emitter- Specified by:
inject
in 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:InjectPayload
A convenience function wrapping the inject method, to produce the final set of PcodeOp objects in an array- Specified by:
getPcode
in 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:
isFallThru
in interfaceInjectPayload
- Returns:
- true if the injected p-code falls thru
-
isIncidentalCopy
public boolean isIncidentalCopy()
- Specified by:
isIncidentalCopy
in 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:InjectPayload
Write out configuration parameters as a \XML tag - Specified by:
saveXml
in interfaceInjectPayload
- Parameters:
buffer
- is the stream to write to
-
restoreXml
public void restoreXml(XmlPullParser parser, SleighLanguage language) throws XmlParseException
Description copied from interface:InjectPayload
Restore 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:
restoreXml
in 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:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in 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
-
-