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
Fields inherited from interface ghidra.program.model.lang.InjectPayload
CALLFIXUP_TYPE, CALLMECHANISM_TYPE, CALLOTHERFIXUP_TYPE, EXECUTABLEPCODE_TYPE
-
Constructor Summary
ModifierConstructorDescriptionprotected
InjectPayloadSleigh
(ConstructTpl pcode, int tp, 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
(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 TypeMethodDescriptionvoid
Encode configuration parameters as a<pcode>
element to streamstatic ConstructTpl
getDummyPcode
(AddressFactory addrFactory) Build a dummy p-code sequence to use in place of a normal parsed payload.getInput()
getName()
int
PcodeOp[]
getPcode
(Program program, InjectContext con) A convenience function wrapping the inject method, to produce the final set of PcodeOp objects in an arrayint
getType()
void
inject
(InjectContext context, PcodeEmit emit) Given a context, send the p-code payload to the emitterboolean
Determine if this InjectPayload and another instance are equivalent (have the same name and generate the same p-code)boolean
If parsing a payload (from XML) fails, a placeholder payload may be substituted and this method returns true for the substitute.boolean
boolean
protected void
All input and output parameters must have a unique index.void
restoreXml
(XmlPullParser parser, SleighLanguage language) Restore the payload from an XML stream.protected void
protected void
protected void
setTemplate
(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:
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
- 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
-
setOutputParameters
-
getInput
- Specified by:
getInput
in interfaceInjectPayload
- Returns:
- array of any input parameters for this inject
-
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) throws UnknownInstructionException, MemoryAccessException, IOException, NotFoundException 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- 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: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
- 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:
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 -
encode
Description copied from interface:InjectPayload
Encode configuration parameters as a<pcode>
element to stream- Specified by:
encode
in interfaceInjectPayload
- Parameters:
encoder
- is the stream encoder- Throws:
IOException
- for errors writing to the underlying stream
-
restoreXml
Description copied from interface:InjectPayload
Restore 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:
restoreXml
in 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:InjectPayload
Determine if this InjectPayload and another instance are equivalent (have the same name and generate the same p-code)- Specified by:
isEquivalent
in 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
-