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
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
FieldsFields inherited from interface ghidra.program.model.lang.InjectPayload
CALLFIXUP_TYPE, CALLMECHANISM_TYPE, CALLOTHERFIXUP_TYPE, EXECUTABLEPCODE_TYPE -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedInjectPayloadSleigh(ConstructTpl pcode, int tp, 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(String sourceName) Constructor for use where restoreXml is overridden and provides name and typeInjectPayloadSleigh(String nm, int tp, String sourceName) Provide basic form, restoreXml fills in the rest -
Method Summary
Modifier and TypeMethodDescriptionvoidEncode configuration parameters as a<pcode>element to streamstatic ConstructTplgetDummyPcode(AddressFactory addrFactory) Build a dummy p-code sequence to use in place of a normal parsed payload.getInput()getName()intPcodeOp[]getPcode(Program program, InjectContext con) A convenience function wrapping the inject method, to produce the final set of PcodeOp objects in an arrayintgetType()voidinject(InjectContext context, PcodeEmit emit) Given a context, send the p-code payload to the emitterbooleanDetermine if this InjectPayload and another instance are equivalent (have the same name and generate the same p-code)booleanIf parsing a payload (from XML) fails, a placeholder payload may be substituted and this method returns true for the substitute.booleanbooleanprotected voidAll input and output parameters must have a unique index.voidrestoreXml(XmlPullParser parser, SleighLanguage language) Restore the payload from an XML stream.protected voidprotected voidprotected voidsetTemplate(ConstructTpl ctl)
-
Field Details
-
name
-
type
protected int type -
source
-
-
Constructor Details
-
InjectPayloadSleigh
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
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
Constructor for use where restoreXml is overridden and provides name and type- Parameters:
sourceName- is string describing the source of this payload
-
InjectPayloadSleigh
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 Details
-
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
- 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
-
setOutputParameters
-
getInput
- Specified by:
getInputin interfaceInjectPayload- Returns:
- array of any input parameters for this inject
-
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) throws UnknownInstructionException, MemoryAccessException, IOException, NotFoundException 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- Throws:
UnknownInstructionException- if there is no underlying instruction being injectedMemoryAccessException- for problems establishing the injection contextIOException- for problems while emitting the injection p-codeNotFoundException- if an expected aspect of the injection is not present in context
-
getPcode
public PcodeOp[] getPcode(Program program, InjectContext con) throws UnknownInstructionException, MemoryAccessException, IOException, NotFoundException 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
- Throws:
UnknownInstructionException- if there is no underlying instruction being injectedMemoryAccessException- for problems establishing the injection contextIOException- for problems while emitting the injection p-codeNotFoundException- if an expected aspect of the injection is not present in context
-
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 -
encode
Description copied from interface:InjectPayloadEncode configuration parameters as a<pcode>element to stream- Specified by:
encodein interfaceInjectPayload- Parameters:
encoder- is the stream encoder- Throws:
IOException- for errors writing to the underlying stream
-
restoreXml
Description copied from interface:InjectPayloadRestore the payload from an XML stream. The root expected document is the<pcode>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
-
isEquivalent
Description copied from interface:InjectPayloadDetermine if this InjectPayload and another instance are equivalent (have the same name and generate the same p-code)- Specified by:
isEquivalentin interfaceInjectPayload- Parameters:
obj- is the other payload- Returns:
- true if they are equivalent
-
getDummyPcode
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
-