decompiler
1.0.0
|
An active container for a set of p-code operations that can be injected into data-flow. More...
#include <pcodeinject.hh>
Public Types | |
enum | { CALLFIXUP_TYPE = 1, CALLOTHERFIXUP_TYPE = 2, CALLMECHANISM_TYPE = 3, EXECUTABLEPCODE_TYPE = 4 } |
Public Member Functions | |
InjectPayload (const string &nm, int4 tp) | |
Construct for use with decode. | |
int4 | getParamShift (void) const |
Get the number of parameters shifted. | |
bool | isDynamic (void) const |
Return true if p-code in the injection is generated dynamically. | |
bool | isIncidentalCopy (void) const |
Return true if any injected COPY is considered incidental. | |
int4 | sizeInput (void) const |
Return the number of input parameters. | |
int4 | sizeOutput (void) const |
Return the number of output parameters. | |
InjectParameter & | getInput (int4 i) |
Get the i-th input parameter. | |
InjectParameter & | getOutput (int4 i) |
Get the i-th output parameter. | |
virtual | ~InjectPayload (void) |
Destructor. | |
virtual void | inject (InjectContext &context, PcodeEmit &emit) const =0 |
virtual void | decode (Decoder &decoder)=0 |
Decode this payload from a stream. | |
virtual void | printTemplate (ostream &s) const =0 |
Print the p-code ops of the injection to a stream (for debugging) | |
string | getName (void) const |
Return the name of the injection. | |
int4 | getType (void) const |
Return the type of injection (CALLFIXUP_TYPE, CALLOTHERFIXUP_TYPE, etc.) | |
virtual string | getSource (void) const =0 |
Return a string describing the source of the injection (.cspec, prototype model, etc.) | |
Protected Member Functions | |
void | orderParameters (void) |
Assign an index to parameters. More... | |
void | decodePayloadAttributes (Decoder &decoder) |
Parse the attributes of the current <pcode> tag. More... | |
void | decodePayloadParams (Decoder &decoder) |
Parse any <input> or <output> children of current <pcode> tag. More... | |
Static Protected Member Functions | |
static void | decodeParameter (Decoder &decoder, string &name, uint4 &size) |
Parse an <input> or <output> element describing an injection parameter. More... | |
Protected Attributes | |
string | name |
Formal name of the payload. | |
int4 | type |
Type of this payload: CALLFIXUP_TYPE, CALLOTHERFIXUP_TYPE, etc. | |
bool | dynamic |
True if the injection is generated dynamically. | |
bool | incidentalCopy |
True if injected COPYs are considered incidental. | |
int4 | paramshift |
Number of parameters shifted in the original call. | |
vector< InjectParameter > | inputlist |
List of input parameters to this payload. | |
vector< InjectParameter > | output |
List of output parameters. | |
An active container for a set of p-code operations that can be injected into data-flow.
This is an abstract base class. Derived classes manage details of how the p-code is stored. The methods provide access to the input/output parameter information, and the main injection is performed with inject().
anonymous enum |
|
staticprotected |
Parse an <input> or <output> element describing an injection parameter.
decoder | is the stream decoder |
name | is used to pass back the parameter name |
size | is used to pass back the parameter size |
References ghidra::Decoder::closeElement(), ghidra::Decoder::getNextAttributeId(), ghidra::Decoder::openElement(), ghidra::Decoder::readString(), and ghidra::Decoder::readUnsignedInteger().
Referenced by decodePayloadParams().
|
protected |
Parse the attributes of the current <pcode> tag.
The <pcode> element must be current and already opened.
decoder | is the stream decoder |
References dynamic, ghidra::Decoder::getNextAttributeId(), incidentalCopy, name, paramshift, ghidra::Decoder::readBool(), ghidra::Decoder::readSignedInteger(), and ghidra::Decoder::readString().
Referenced by ghidra::InjectCallotherGhidra::decode(), and ghidra::ExecutablePcodeGhidra::decode().
|
protected |
Parse any <input> or <output> children of current <pcode> tag.
Elements are processed until the first child that isn't an <input> or <output> tag is encountered. The <pcode> element must be current and already opened.
decoder | is the stream decoder |
References decodeParameter(), inputlist, orderParameters(), output, and ghidra::Decoder::peekElement().
Referenced by ghidra::InjectCallotherGhidra::decode(), and ghidra::ExecutablePcodeGhidra::decode().
|
pure virtual |
Perform the injection of this payload into data-flow.
P-code operations representing this payload are copied into the controlling analysis context. The provided PcodeEmit object dictates exactly where the PcodeOp and Varnode objects are inserted and to what container. An InjectContext object specifies how placeholder elements become concrete Varnodes in the appropriate context.
context | is the provided InjectConject object |
emit | is the provovided PcodeEmit object |
Implemented in ghidra::ExecutablePcodeGhidra, and ghidra::InjectPayloadGhidra.
Referenced by ghidra::ExecutablePcode::build(), ghidra::FlowInfo::doInjection(), and ghidra::Funcdata::doLiveInject().
|
protected |
Assign an index to parameters.
Input and output parameters are assigned a unique index.
References inputlist, and output.
Referenced by decodePayloadParams().