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 Object implements InjectPayload
InjectPayloadSleigh defines an InjectPayload of p-code which is defined via a String passed to the sleigh compiler
  • Field Details

    • name

      protected String name
    • type

      protected int type
    • source

      protected String source
  • Constructor Details

    • 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 parse
      failedPayload - is the failed payload
    • InjectPayloadSleigh

      protected InjectPayloadSleigh(ConstructTpl pcode, int tp, String nm)
      Constructor for a dummy payload, given just a name
      Parameters:
      pcode - is the dummy p-code sequence
      tp - is the type of injection
      nm - is the name of the injection
    • InjectPayloadSleigh

      protected InjectPayloadSleigh(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(String nm, int tp, String sourceName)
      Provide basic form, restoreXml fills in the rest
      Parameters:
      nm - must provide formal name
      tp - must provide type
      sourceName - is a description of the source of this payload
  • Method Details

    • getName

      public String getName()
      Specified by:
      getName in interface InjectPayload
      Returns:
      formal name for this injection
    • getType

      public int getType()
      Specified by:
      getType in interface InjectPayload
      Returns:
      the type of this injection: CALLFIXUP_TYPE, CALLMECHANISM_TYPE, etc.
    • getSource

      public String getSource()
      Specified by:
      getSource in interface InjectPayload
      Returns:
      a String describing the source of this payload
    • getParamShift

      public int getParamShift()
      Specified by:
      getParamShift in interface InjectPayload
      Returns:
      number of parameters from the original call which should be truncated
    • setInputParameters

      protected void setInputParameters(List<InjectPayload.InjectParameter> in)
    • setOutputParameters

      protected void setOutputParameters(List<InjectPayload.InjectParameter> out)
    • getInput

      public InjectPayload.InjectParameter[] getInput()
      Specified by:
      getInput in interface InjectPayload
      Returns:
      array of any input parameters for this inject
    • getOutput

      public InjectPayload.InjectParameter[] getOutput()
      Specified by:
      getOutput in interface InjectPayload
      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 interface InjectPayload
      Returns:
      true if this is a placeholder for a payload with parse errors.
    • inject

      Description copied from interface: InjectPayload
      Given a context, send the p-code payload to the emitter
      Specified by:
      inject in interface InjectPayload
      Parameters:
      context - is the context for injection
      emit - is the object accumulating the final p-code
      Throws:
      UnknownInstructionException - if there is no underlying instruction being injected
      MemoryAccessException - for problems establishing the injection context
      IOException - for problems while emitting the injection p-code
      NotFoundException - if an expected aspect of the injection is not present in context
    • getPcode

      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 interface InjectPayload
      Parameters:
      program - is the Program for which injection is happening
      con - is the context for injection
      Returns:
      the array of PcodeOps
      Throws:
      UnknownInstructionException - if there is no underlying instruction being injected
      MemoryAccessException - for problems establishing the injection context
      IOException - for problems while emitting the injection p-code
      NotFoundException - if an expected aspect of the injection is not present in context
    • isFallThru

      public boolean isFallThru()
      Specified by:
      isFallThru in interface InjectPayload
      Returns:
      true if the injected p-code falls thru
    • isIncidentalCopy

      public boolean isIncidentalCopy()
      Specified by:
      isIncidentalCopy in interface InjectPayload
      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

      public void encode(Encoder encoder) throws IOException
      Description copied from interface: InjectPayload
      Encode configuration parameters as a <pcode> element to stream
      Specified by:
      encode in interface InjectPayload
      Parameters:
      encoder - is the stream encoder
      Throws:
      IOException - for errors writing to the underlying stream
    • 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 <pcode> tag, which may be wrapped with another tag by the derived class.
      Specified by:
      restoreXml in interface InjectPayload
      Parameters:
      parser - is the XML stream
      language - is used to resolve registers and address spaces
      Throws:
      XmlParseException - for badly formed XML
    • setTemplate

      protected void setTemplate(ConstructTpl ctl)
    • isEquivalent

      public boolean isEquivalent(InjectPayload obj)
      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 interface InjectPayload
      Parameters:
      obj - is the other payload
      Returns:
      true if they are equivalent
    • 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