decompiler 1.0.0
Public Member Functions | Private Attributes | List of all members
ghidra::InjectPayloadDynamic Class Reference

A debugging placeholder for a payload that changes depending on context. More...

#include <inject_sleigh.hh>

Inheritance diagram for ghidra::InjectPayloadDynamic:
ghidra::InjectPayload

Public Member Functions

 InjectPayloadDynamic (Architecture *g, InjectPayload *base)
 Constructor for use with decode.
 
void decodeEntry (Decoder &decoder)
 Decode a specific p-code sequence and the context in which it applied.
 
virtual void inject (InjectContext &context, PcodeEmit &emit) const
 
virtual void decode (Decoder &decoder)
 Decode this payload from a stream.
 
virtual void printTemplate (ostream &s) const
 Print the p-code ops of the injection to a stream (for debugging)
 
virtual string getSource (void) const
 Return a string describing the source of the injection (.cspec, prototype model, etc.)
 
- Public Member Functions inherited from ghidra::InjectPayload
 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.
 
InjectParametergetInput (int4 i)
 Get the i-th input parameter.
 
InjectParametergetOutput (int4 i)
 Get the i-th output parameter.
 
virtual ~InjectPayload (void)
 Destructor.
 
string getName (void) const
 Return the name of the injection.
 
int4 getType (void) const
 Return the type of injection (CALLFIXUP_TYPE, CALLOTHERFIXUP_TYPE, etc.)
 

Private Attributes

Architectureglb
 The architecture owning this payload.
 
map< Address, Document * > addrMap
 Map from address to specific inject.
 

Additional Inherited Members

- Public Types inherited from ghidra::InjectPayload
enum  { CALLFIXUP_TYPE = 1 , CALLOTHERFIXUP_TYPE = 2 , CALLMECHANISM_TYPE = 3 , EXECUTABLEPCODE_TYPE = 4 }
 
- Protected Member Functions inherited from ghidra::InjectPayload
void orderParameters (void)
 Assign an index to parameters.
 
void decodePayloadAttributes (Decoder &decoder)
 Parse the attributes of the current <pcode> tag.
 
void decodePayloadParams (Decoder &decoder)
 Parse any <input> or <output> children of current <pcode> tag.
 
- Static Protected Member Functions inherited from ghidra::InjectPayload
static void decodeParameter (Decoder &decoder, string &name, uint4 &size)
 Parse an <input> or <output> element describing an injection parameter.
 
- Protected Attributes inherited from ghidra::InjectPayload
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< InjectParameterinputlist
 List of input parameters to this payload.
 
vector< InjectParameteroutput
 List of output parameters.
 

Detailed Description

A debugging placeholder for a payload that changes depending on context.

Implemented as a simple map from an Address to an XML description of the p-code sequence to inject. This is used internally by PcodeInjectLibrarySleigh in a debug environment to hold multiple payloads for objects where InjectPayload::isDynamic() returns true.

Constructor & Destructor Documentation

◆ InjectPayloadDynamic()

ghidra::InjectPayloadDynamic::InjectPayloadDynamic ( Architecture g,
InjectPayload base 
)

Member Function Documentation

◆ decode()

virtual void ghidra::InjectPayloadDynamic::decode ( Decoder decoder)
inlinevirtual

Decode this payload from a stream.

Implements ghidra::InjectPayload.

◆ decodeEntry()

void ghidra::InjectPayloadDynamic::decodeEntry ( Decoder decoder)

Decode a specific p-code sequence and the context in which it applied.

Decode the Address for a specific context and then elements for the specific p-code ops.

Parameters
decoderis the stream to pull from

References addrMap, ghidra::Decoder::closeElement(), ghidra::Address::decode(), ghidra::Decoder::openElement(), ghidra::Decoder::readString(), and ghidra::xml_tree().

Referenced by ghidra::PcodeInjectLibrarySleigh::decodeDebug().

◆ getSource()

virtual string ghidra::InjectPayloadDynamic::getSource ( void  ) const
inlinevirtual

Return a string describing the source of the injection (.cspec, prototype model, etc.)

Implements ghidra::InjectPayload.

◆ inject()

void ghidra::InjectPayloadDynamic::inject ( InjectContext context,
PcodeEmit emit 
) const
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.

Parameters
contextis the provided InjectConject object
emitis the provovided PcodeEmit object

Implements ghidra::InjectPayload.

References addrMap, ghidra::InjectContext::baseaddr, ghidra::XmlDecode::closeElement(), ghidra::Address::decode(), ghidra::PcodeEmit::decodeOp(), glb, ghidra::XmlDecode::openElement(), ghidra::XmlDecode::peekElement(), and ghidra::Architecture::translate.

◆ printTemplate()

virtual void ghidra::InjectPayloadDynamic::printTemplate ( ostream &  s) const
inlinevirtual

Print the p-code ops of the injection to a stream (for debugging)

Implements ghidra::InjectPayload.


The documentation for this class was generated from the following files: