Class InstructionStub

java.lang.Object
ghidra.program.model.listing.InstructionStub
All Implemented Interfaces:
ProcessorContext, ProcessorContextView, CodeUnit, Instruction, MemBuffer, PropertySet

public class InstructionStub extends Object implements Instruction
InstructionStub can be extended for use by tests. It throws an UnsupportedOperationException for all methods in the Instruction interface. Any method that is needed for your test can then be overridden so it can provide its own test implementation and return value.
  • Constructor Details

    • InstructionStub

      public InstructionStub()
  • Method Details

    • getAddressString

      public String getAddressString(boolean showBlockName, boolean pad)
      Description copied from interface: CodeUnit
      Get the string representation of the starting address for this code unit.
      Specified by:
      getAddressString in interface CodeUnit
      Parameters:
      showBlockName - true if the string should include the memory block name
      pad - if true, the address will be padded with leading zeros. Even if pad is false, the string will be padded to make the address string contain at least 4 digits.
      Returns:
      string representation of address
    • setProperty

      public void setProperty(String name, Saveable value)
      Description copied from interface: PropertySet
      Set the named property with the given Saveable value.
      Specified by:
      setProperty in interface PropertySet
      Parameters:
      name - the name of the property.
      value - value to be stored.
    • setProperty

      public void setProperty(String name, String value)
      Description copied from interface: PropertySet
      Set the named string property with the given value.
      Specified by:
      setProperty in interface PropertySet
      Parameters:
      name - the name of the property.
      value - value to be stored.
    • setProperty

      public void setProperty(String name, int value)
      Description copied from interface: PropertySet
      Set the named integer property with the given value.
      Specified by:
      setProperty in interface PropertySet
      Parameters:
      name - the name of the property.
      value - value to be stored.
    • setProperty

      public void setProperty(String name)
      Description copied from interface: PropertySet
      Set the named property. This method is used for "void" properites. The property is either set or not set - there is no value
      Specified by:
      setProperty in interface PropertySet
      Parameters:
      name - the name of the property.
    • getObjectProperty

      public Saveable getObjectProperty(String name)
      Description copied from interface: PropertySet
      Get the object property for name; returns null if there is no name property for this code unit.
      Specified by:
      getObjectProperty in interface PropertySet
      Parameters:
      name - the name of the property
      Returns:
      Saveable property value, with map-specific implementation class, or null.
    • getStringProperty

      public String getStringProperty(String name)
      Description copied from interface: PropertySet
      Get the string property for name; returns null if there is no name property for this code unit.
      Specified by:
      getStringProperty in interface PropertySet
      Parameters:
      name - the name of the property
      Returns:
      string property value or null
    • getIntProperty

      public int getIntProperty(String name) throws NoValueException
      Description copied from interface: PropertySet
      Get the int property for name.
      Specified by:
      getIntProperty in interface PropertySet
      Parameters:
      name - the name of the property
      Returns:
      integer property value property has been set
      Throws:
      NoValueException - if there is not name property for this code unit
    • hasProperty

      public boolean hasProperty(String name)
      Description copied from interface: PropertySet
      Returns true if the codeunit has the given property defined. This method works for all property map types.
      Specified by:
      hasProperty in interface PropertySet
      Parameters:
      name - the name of the property
      Returns:
      true if property has been set, else false
    • getVoidProperty

      public boolean getVoidProperty(String name)
      Description copied from interface: PropertySet
      Returns whether this code unit is marked as having the name property.
      Specified by:
      getVoidProperty in interface PropertySet
      Parameters:
      name - the name of the property
      Returns:
      true if property has been set, else false
    • propertyNames

      public Iterator<String> propertyNames()
      Description copied from interface: PropertySet
      Get an iterator over the property names which have values applied.
      Specified by:
      propertyNames in interface PropertySet
      Returns:
      iterator of all property map names which have values applied
    • removeProperty

      public void removeProperty(String name)
      Description copied from interface: PropertySet
      Remove the property value associated with the given name .
      Specified by:
      removeProperty in interface PropertySet
      Parameters:
      name - the name of the property
    • getLabel

      public String getLabel()
      Description copied from interface: CodeUnit
      Get the label for this code unit.
      Specified by:
      getLabel in interface CodeUnit
    • getSymbols

      public Symbol[] getSymbols()
      Description copied from interface: CodeUnit
      Get the Symbols for this code unit.
      Specified by:
      getSymbols in interface CodeUnit
    • getPrimarySymbol

      public Symbol getPrimarySymbol()
      Description copied from interface: CodeUnit
      Get the Primary Symbol for this code unit.
      Specified by:
      getPrimarySymbol in interface CodeUnit
    • getMinAddress

      public Address getMinAddress()
      Description copied from interface: CodeUnit
      Get the starting address for this code unit.
      Specified by:
      getMinAddress in interface CodeUnit
    • getMaxAddress

      public Address getMaxAddress()
      Description copied from interface: CodeUnit
      Get the ending address for this code unit.
      Specified by:
      getMaxAddress in interface CodeUnit
    • getMnemonicString

      public String getMnemonicString()
      Description copied from interface: CodeUnit
      Get the mnemonic for this code unit, e.g., MOV, JMP
      Specified by:
      getMnemonicString in interface CodeUnit
    • getComment

      public String getComment(int commentType)
      Description copied from interface: CodeUnit
      Get the comment for the given type
      Specified by:
      getComment in interface CodeUnit
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      Returns:
      the comment string of the appropriate type or null if no comment of that type exists for this codeunit
    • getCommentAsArray

      public String[] getCommentAsArray(int commentType)
      Description copied from interface: CodeUnit
      Get the comment for the given type and parse it into an array of strings such that each line is its own string.
      Specified by:
      getCommentAsArray in interface CodeUnit
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      Returns:
      an array of strings where each item in the array is a line of text in the comment. If there is no comment of the requested type, an empty array is returned.
    • setComment

      public void setComment(int commentType, String comment)
      Description copied from interface: CodeUnit
      Set the comment for the given comment type. Passing null clears the comment
      Specified by:
      setComment in interface CodeUnit
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      comment - comment for code unit; null clears the comment
    • setCommentAsArray

      public void setCommentAsArray(int commentType, String[] comment)
      Description copied from interface: CodeUnit
      Set the comment (with each line in its own string) for the given comment type
      Specified by:
      setCommentAsArray in interface CodeUnit
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      comment - an array of strings where each string is a single line of the comment.
    • getLength

      public int getLength()
      Description copied from interface: CodeUnit
      Get length of this code unit. NOTE: If an instruction length-override is set this method will return the reduced length.
      Specified by:
      getLength in interface CodeUnit
      Returns:
      code unit length
    • getParsedLength

      public int getParsedLength()
      Description copied from interface: Instruction
      Get the actual number of bytes parsed when forming this instruction. While this method will generally return the same value as CodeUnit.getLength(), its value will differ when Instruction.setLengthOverride(int) has been used. In addition, it is important to note that CodeUnit.getMaxAddress() will always reflect a non-overlapping address which reflects CodeUnit.getLength(). This method is equivalent to the following code for a given instruction:
       InstructionPrototype proto = instruction.Instruction.getPrototype();
       int length = proto.getLength();
       
      Specified by:
      getParsedLength in interface Instruction
      Returns:
      the actual number of bytes parsed when forming this instruction
    • getBytes

      public byte[] getBytes() throws MemoryAccessException
      Description copied from interface: CodeUnit
      Get the bytes that make up this code unit. NOTE: If an instruction length-override is set this method will not return all bytes associated with the instruction prototype.
      Specified by:
      getBytes in interface CodeUnit
      Returns:
      an array of bytes that are in memory at the codeunits address. The array length is the same as the codeUnits length
      Throws:
      MemoryAccessException - if the full number of bytes could not be read.
    • getParsedBytes

      public byte[] getParsedBytes() throws MemoryAccessException
      Description copied from interface: Instruction
      Get the actual bytes parsed when forming this instruction. While this method will generally return the same value as CodeUnit.getBytes(), it will return more bytes when Instruction.setLengthOverride(int) has been used. In this override situation, the bytes returned will generally duplicate some of the parsed bytes associated with the next instruction that this instruction overlaps. This method is equivalent to the following code for a given instruction:
       InstructionPrototype proto = instruction.Instruction.getPrototype();
       Memory mem = instruction.MemBuffer.getMemory();
       byte[] bytes = mem.getBytes(instruction.MemBuffer.getAddress(), proto.getLength());
       int length = proto.getLength();
       
      Specified by:
      getParsedBytes in interface Instruction
      Returns:
      the actual number of bytes parsed when forming this instruction
      Throws:
      MemoryAccessException - if the full number of bytes could not be read
    • getBytesInCodeUnit

      public void getBytesInCodeUnit(byte[] buffer, int bufferOffset) throws MemoryAccessException
      Description copied from interface: CodeUnit
      Copies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.
      Specified by:
      getBytesInCodeUnit in interface CodeUnit
      Parameters:
      buffer - byte array to copy into
      bufferOffset - offset in byte array the copy will start
      Throws:
      MemoryAccessException - if the full number of bytes could not be read.
    • contains

      public boolean contains(Address testAddr)
      Description copied from interface: CodeUnit
      Returns true if address is contained in the range of this codeUnit
      Specified by:
      contains in interface CodeUnit
      Parameters:
      testAddr - the address to test.
    • compareTo

      public int compareTo(Address addr)
      Description copied from interface: CodeUnit
      Compares the given address to the address range of this node.
      Specified by:
      compareTo in interface CodeUnit
      Parameters:
      addr - address to compare.
      Returns:
      a negative integer if this addr is greater than the maximum range address zero if addr is in the range a positive integer if addr is less than minimum range address
    • addMnemonicReference

      public void addMnemonicReference(Address refAddr, RefType refType, SourceType sourceType)
      Description copied from interface: CodeUnit
      Add a reference to the mnemonic for this code unit.
      Specified by:
      addMnemonicReference in interface CodeUnit
      Parameters:
      refAddr - address to add as a reference.
      refType - the type of reference to add.
      sourceType - the source of this reference
    • removeMnemonicReference

      public void removeMnemonicReference(Address refAddr)
      Description copied from interface: CodeUnit
      Remove a reference to the mnemonic for this code unit.
      Specified by:
      removeMnemonicReference in interface CodeUnit
      Parameters:
      refAddr - the address to remove as a reference.
    • getMnemonicReferences

      public Reference[] getMnemonicReferences()
      Description copied from interface: CodeUnit
      Get references for the mnemonic for this code unit.
      Specified by:
      getMnemonicReferences in interface CodeUnit
      Returns:
      an array of memory references. A zero length array will be returned if there are no references for the mnemonic.
    • getOperandReferences

      public Reference[] getOperandReferences(int index)
      Description copied from interface: CodeUnit
      Get the references for the operand index.
      Specified by:
      getOperandReferences in interface CodeUnit
      Parameters:
      index - operand index (0 is the first operand)
    • getPrimaryReference

      public Reference getPrimaryReference(int index)
      Description copied from interface: CodeUnit
      Get the primary reference for the operand index.
      Specified by:
      getPrimaryReference in interface CodeUnit
      Parameters:
      index - operand index (0 is the first operand)
    • addOperandReference

      public void addOperandReference(int index, Address refAddr, RefType type, SourceType sourceType)
      Description copied from interface: CodeUnit
      Add a memory reference to the operand at the given index.
      Specified by:
      addOperandReference in interface CodeUnit
      Parameters:
      index - operand index
      refAddr - reference address
      type - the reference type to be added.
      sourceType - the source of this reference
    • removeOperandReference

      public void removeOperandReference(int index, Address refAddr)
      Description copied from interface: CodeUnit
      Remove a reference to the operand.
      Specified by:
      removeOperandReference in interface CodeUnit
      Parameters:
      index - operand index
      refAddr - address referencing the operand
    • getReferencesFrom

      public Reference[] getReferencesFrom()
      Description copied from interface: CodeUnit
      Get ALL memory references FROM this code unit.
      Specified by:
      getReferencesFrom in interface CodeUnit
      Returns:
      an array of memory references from this codeUnit or an empty array if there are no references.
    • getReferenceIteratorTo

      public ReferenceIterator getReferenceIteratorTo()
      Description copied from interface: CodeUnit
      Get an iterator over all references TO this code unit.
      Specified by:
      getReferenceIteratorTo in interface CodeUnit
    • getProgram

      public Program getProgram()
      Description copied from interface: CodeUnit
      Returns the program that generated this CodeUnit.
      Specified by:
      getProgram in interface CodeUnit
    • getExternalReference

      public ExternalReference getExternalReference(int opIndex)
      Description copied from interface: CodeUnit
      Gets the external reference (if any) at the opIndex
      Specified by:
      getExternalReference in interface CodeUnit
      Parameters:
      opIndex - the operand index to look for external references
      Returns:
      the external reference at the operand or null if none exists.
    • removeExternalReference

      public void removeExternalReference(int opIndex)
      Description copied from interface: CodeUnit
      Remove external reference (if any) at the given opIndex opIndex the index of the operand from which to remove any external reference.
      Specified by:
      removeExternalReference in interface CodeUnit
    • setPrimaryMemoryReference

      public void setPrimaryMemoryReference(Reference ref)
      Description copied from interface: CodeUnit
      Sets a memory reference to be the primary reference at its address/opIndex location. The primary reference is the one that is used in the getOperandRepresentation() method.
      Specified by:
      setPrimaryMemoryReference in interface CodeUnit
      Parameters:
      ref - the reference to be set as primary.
    • setStackReference

      public void setStackReference(int opIndex, int offset, SourceType sourceType, RefType refType)
      Description copied from interface: CodeUnit
      Sets a stack reference at the offset on the specified operand index, which effectively substitutes the previous operation interpretation
      NOTE: If another reference was previously set on the operand, then it will be replaced with this stack reference
      Specified by:
      setStackReference in interface CodeUnit
      Parameters:
      opIndex - the index of the operand to set this stack reference
      offset - the (+/-) offset from stack base address
      sourceType - the source of this reference
      refType - type of reference, RefType.READ,WRITE,PTR...
    • setRegisterReference

      public void setRegisterReference(int opIndex, Register reg, SourceType sourceType, RefType refType)
      Description copied from interface: CodeUnit
      Sets a register reference at the offset on the specified operand index, which effectively substitutes the previous operation interpretation
      NOTE: If another reference was previously set on the operand, then it will be replaced with this register reference
      Specified by:
      setRegisterReference in interface CodeUnit
      Parameters:
      opIndex - the index of the operand to set this register reference
      reg - a register
      sourceType - the source of this reference
      refType - type of reference, RefType.READ,WRITE,PTR...
    • getNumOperands

      public int getNumOperands()
      Description copied from interface: CodeUnit
      Get the number of operands for this code unit.
      Specified by:
      getNumOperands in interface CodeUnit
    • getAddress

      public Address getAddress(int opIndex)
      Description copied from interface: CodeUnit
      Get the Address for the given operand index if one exists. Data objects have one operand (the value).
      Specified by:
      getAddress in interface CodeUnit
      Parameters:
      opIndex - index of the operand.
      Returns:
      An addres if the operand represents a fully qualified address (given the context), or if the operand is a Scalar treated as an address. Null is returned if no address or scalar exists on that operand.
    • getScalar

      public Scalar getScalar(int opIndex)
      Description copied from interface: CodeUnit
      Returns the scalar at the given operand index. Data objects have one operand (the value).
      Specified by:
      getScalar in interface CodeUnit
      Parameters:
      opIndex - index of the operand.
      Returns:
      the scalar at the given operand index or null if no scalar exists at that index.
    • getByte

      public byte getByte(int offset) throws MemoryAccessException
      Description copied from interface: MemBuffer
      Get one byte from memory at the current position plus offset.
      Specified by:
      getByte in interface MemBuffer
      Parameters:
      offset - the displacement from the current position.
      Returns:
      the data at offset from the current position.
      Throws:
      MemoryAccessException - if memory cannot be read at the specified offset
    • getBytes

      public int getBytes(byte[] b, int memoryBufferOffset)
      Description copied from interface: MemBuffer
      Reads b.length bytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position. The actual number of bytes may be fewer if bytes can't be read.
      Specified by:
      getBytes in interface MemBuffer
      Parameters:
      b - the buffer into which bytes will be placed
      memoryBufferOffset - the offset in this memory buffer from which to start reading bytes.
      Returns:
      the number of bytes read which may be fewer than b.length if available bytes are exhausted or no bytes are available at the specified offset.
    • getAddress

      public Address getAddress()
      Description copied from interface: MemBuffer
      Get the Address which corresponds to the offset 0.
      Specified by:
      getAddress in interface MemBuffer
      Returns:
      the current address of offset 0.
    • getMemory

      public Memory getMemory()
      Description copied from interface: MemBuffer
      Get the Memory object actually used by the MemBuffer.
      Specified by:
      getMemory in interface MemBuffer
      Returns:
      the Memory used by this MemBuffer or null if not available.
    • isBigEndian

      public boolean isBigEndian()
      Description copied from interface: MemBuffer
      Returns true if the underlying bytes are in big-endian order, false if they are little endian.
      Specified by:
      isBigEndian in interface MemBuffer
      Returns:
      true if the underlying bytes are in big-endian order, false if they are little endian.
    • getShort

      public short getShort(int offset) throws MemoryAccessException
      Description copied from interface: MemBuffer
      returns the short at the given offset, taking into account the endianness.
      Specified by:
      getShort in interface MemBuffer
      Parameters:
      offset - the offset from the membuffers origin (the address that it is set at)
      Returns:
      the short at the given offset, taking into account the endianness.
      Throws:
      MemoryAccessException - if a 2-byte short value cannot be read at the specified offset
    • getInt

      public int getInt(int offset) throws MemoryAccessException
      Description copied from interface: MemBuffer
      returns the int at the given offset, taking into account the endianness.
      Specified by:
      getInt in interface MemBuffer
      Parameters:
      offset - the offset from the membuffers origin (the address that it is set at)
      Returns:
      the int at the given offset, taking into account the endianness.
      Throws:
      MemoryAccessException - if a 4-byte integer value cannot be read at the specified offset
    • getLong

      public long getLong(int offset) throws MemoryAccessException
      Description copied from interface: MemBuffer
      returns the long at the given offset, taking into account the endianness.
      Specified by:
      getLong in interface MemBuffer
      Parameters:
      offset - the offset from the membuffers origin (the address that it is set at)
      Returns:
      the long at the given offset, taking into account the endianness.
      Throws:
      MemoryAccessException - if a 8-byte long value cannot be read at the specified offset
    • getBigInteger

      public BigInteger getBigInteger(int offset, int size, boolean signed) throws MemoryAccessException
      Description copied from interface: MemBuffer
      returns the value at the given offset, taking into account the endianness.
      Specified by:
      getBigInteger in interface MemBuffer
      Parameters:
      offset - the offset from the membuffers origin (the address that it is set at)
      size - the number of bytes to include in the value
      signed - true if value should be treated as a signed twos-compliment value.
      Returns:
      the value at the given offset, taking into account the endianness.
      Throws:
      MemoryAccessException - if the request size value cannot be read at the specified offset
    • setValue

      public void setValue(Register register, BigInteger value) throws ContextChangeException
      Description copied from interface: ProcessorContext
      Sets the value for a Register.
      Specified by:
      setValue in interface ProcessorContext
      Parameters:
      register - the register to have its value set
      value - the value for the register (null is not permitted).
      Throws:
      ContextChangeException - an illegal attempt to change context was made
    • setRegisterValue

      public void setRegisterValue(RegisterValue value) throws ContextChangeException
      Description copied from interface: ProcessorContext
      Sets the specified register value within this context.
      Specified by:
      setRegisterValue in interface ProcessorContext
      Parameters:
      value - register value
      Throws:
      ContextChangeException - an illegal attempt to change context was made
    • clearRegister

      public void clearRegister(Register register) throws ContextChangeException
      Description copied from interface: ProcessorContext
      Clears the register within this context.
      Specified by:
      clearRegister in interface ProcessorContext
      Parameters:
      register - register to be cleared.
      Throws:
      ContextChangeException - an illegal attempt to change context was made
    • getBaseContextRegister

      public Register getBaseContextRegister()
      Specified by:
      getBaseContextRegister in interface ProcessorContextView
      Returns:
      the base processor context register or null if one has not been defined
    • getRegisters

      public List<Register> getRegisters()
      Description copied from interface: ProcessorContextView
      Returns all the Registers for the processor as an unmodifiable list
      Specified by:
      getRegisters in interface ProcessorContextView
      Returns:
      all the Registers for the processor
    • getRegister

      public Register getRegister(String name)
      Description copied from interface: ProcessorContextView
      Get a Register given the name of a register
      Specified by:
      getRegister in interface ProcessorContextView
      Parameters:
      name - the name of the register.
      Returns:
      The register with the given name.
    • getValue

      public BigInteger getValue(Register register, boolean signed)
      Description copied from interface: ProcessorContextView
      Get the contents of a processor register as a BigInteger object
      Specified by:
      getValue in interface ProcessorContextView
      Parameters:
      register - register to get the value for
      Returns:
      a BigInteger object containing the value of the register if a value exists, otherwise null.
    • getRegisterValue

      public RegisterValue getRegisterValue(Register register)
      Description copied from interface: ProcessorContextView
      Get the RegisterValue for the given register.
      Specified by:
      getRegisterValue in interface ProcessorContextView
      Parameters:
      register - register to get the value for
      Returns:
      RegisterValue object containing the value of the register if a value exists, otherwise null.
    • hasValue

      public boolean hasValue(Register register)
      Description copied from interface: ProcessorContextView
      Returns true if a value is defined for the given register.
      Specified by:
      hasValue in interface ProcessorContextView
      Parameters:
      register - the register to check for a value.
      Returns:
      true if the given register has a value.
    • getPrototype

      public InstructionPrototype getPrototype()
      Specified by:
      getPrototype in interface Instruction
      Returns:
      the prototype for this instruction.
    • getRegister

      public Register getRegister(int opIndex)
      Description copied from interface: Instruction
      If operand is a pure Register, return the register.
      Specified by:
      getRegister in interface Instruction
      Parameters:
      opIndex - index of the operand.
      Returns:
      A register if the operand represents a register.
    • getOpObjects

      public Object[] getOpObjects(int opIndex)
      Description copied from interface: Instruction
      Get objects used by this operand (Address, Scalar, Register ...)
      Specified by:
      getOpObjects in interface Instruction
      Parameters:
      opIndex - index of the operand.
      Returns:
      objects used by this operand (Address, Scalar, Register ...)
    • getInputObjects

      public Object[] getInputObjects()
      Description copied from interface: Instruction
      Get the Input objects used by this instruction. These could be Scalars, Registers, Addresses
      Specified by:
      getInputObjects in interface Instruction
      Returns:
      an array of objects that are used by this instruction
    • getResultObjects

      public Object[] getResultObjects()
      Description copied from interface: Instruction
      Get the Result objects produced/affected by this instruction These would probably only be Register or Address
      Specified by:
      getResultObjects in interface Instruction
      Returns:
      an array of objects that are affected by this instruction
    • getDefaultOperandRepresentation

      public String getDefaultOperandRepresentation(int opIndex)
      Description copied from interface: Instruction
      Get the operand representation for the given operand index without markup.
      Specified by:
      getDefaultOperandRepresentation in interface Instruction
      Parameters:
      opIndex - operand index
      Returns:
      operand represented as a string.
    • getDefaultOperandRepresentationList

      public List<Object> getDefaultOperandRepresentationList(int opIndex)
      Description copied from interface: Instruction
      Get the operand representation for the given operand index. A list of Register, Address, Scalar, Character and String objects is returned - without markup!
      Specified by:
      getDefaultOperandRepresentationList in interface Instruction
      Parameters:
      opIndex - operand index
      Returns:
      ArrayList of pieces of the operand representation. Unsupported languages may return null.
    • getSeparator

      public String getSeparator(int opIndex)
      Description copied from interface: Instruction
      Get the separator strings between an operand. The separator string for 0 are the characters before the first operand. The separator string for numOperands+1 are the characters after the last operand.
      Specified by:
      getSeparator in interface Instruction
      Parameters:
      opIndex - valid values are 0 thru numOperands+1
      Returns:
      separator string, or null if there is no string
    • getOperandType

      public int getOperandType(int opIndex)
      Description copied from interface: Instruction
      Get the type of a specific operand.
      Specified by:
      getOperandType in interface Instruction
      Parameters:
      opIndex - the index of the operand. (zero based)
      Returns:
      the type of the operand.
      See Also:
    • getOperandRefType

      public RefType getOperandRefType(int index)
      Description copied from interface: Instruction
      Get the operand reference type for the given operand index.
      Specified by:
      getOperandRefType in interface Instruction
      Parameters:
      index - operand index
      Returns:
      the operand reference type for the given operand index.
    • getDefaultFallThroughOffset

      public int getDefaultFallThroughOffset()
      Description copied from interface: Instruction
      Get default fall-through offset in bytes from start of instruction to the fallthrough instruction. This accounts for any instructions contained with delay slots.
      Specified by:
      getDefaultFallThroughOffset in interface Instruction
      Returns:
      default fall-through offset or zero (0) if instruction has no fallthrough
    • getDefaultFallThrough

      public Address getDefaultFallThrough()
      Description copied from interface: Instruction
      Get the default fallthrough for this instruction. This accounts for any instructions contained with delay slots.
      Specified by:
      getDefaultFallThrough in interface Instruction
      Returns:
      fall-through address or null if instruction has no default fallthrough
    • getFallThrough

      public Address getFallThrough()
      Description copied from interface: Instruction
      Get the fallthrough for this instruction, factoring in any fallthrough override and delay slotted instructions.
      Specified by:
      getFallThrough in interface Instruction
      Returns:
      fall-through address or null if instruction has no fallthrough
    • getFallFrom

      public Address getFallFrom()
      Specified by:
      getFallFrom in interface Instruction
      Returns:
      the Address for the instruction that fell through to this instruction. This is useful for handling instructions that are found in a delay slot. Note: if an instruction is in a delayslot, then it may have a branch into the delayslot, which is handled as follows
       JMPIF Y, X
         lab:
           _ADD         getFallFrom() = JMPIF
       MOV              getFallFrom() = _ADD
       
       JMP Y, X
         lab:
           _ADD         getFallFrom() = null
       MOV              getFallFrom() = _ADD
      
       JMPIF Y, X
           _ADD         getFallFrom() = JMPIF
       MOV              getFallFrom() = JMPIF
         
       JMP Y, X
           _ADD         getFallFrom() = JMP
       MOV              getFallFrom() = null
      
    • getFlows

      public Address[] getFlows()
      Description copied from interface: Instruction
      Get an array of Address objects for all flows other than a fall-through. This will include any flow references which have been added to the instruction.
      Specified by:
      getFlows in interface Instruction
      Returns:
      flow addresses or null if there are no flows
    • getDefaultFlows

      public Address[] getDefaultFlows()
      Description copied from interface: Instruction
      Get an array of Address objects for all default flows established by the underlying instruction prototype. References are ignored.
      Specified by:
      getDefaultFlows in interface Instruction
      Returns:
      flow addresses or null if there are no flows
    • getFlowType

      public FlowType getFlowType()
      Specified by:
      getFlowType in interface Instruction
      Returns:
      the flow type of this instruction (how this instruction flows to the next instruction).
    • isFallthrough

      public boolean isFallthrough()
      Specified by:
      isFallthrough in interface Instruction
      Returns:
      true if this instruction has no execution flow other than fall-through.
    • hasFallthrough

      public boolean hasFallthrough()
      Specified by:
      hasFallthrough in interface Instruction
      Returns:
      true if this instruction has a fall-through flow.
    • getFlowOverride

      public FlowOverride getFlowOverride()
      Specified by:
      getFlowOverride in interface Instruction
      Returns:
      the flow override which may have been set on this instruction.
    • setLengthOverride

      public void setLengthOverride(int length)
      Description copied from interface: Instruction
      Set instruction length override. Specified length must be in the range 0..7 where 0 clears the setting and adopts the default length. The specified length must be less than the actual number of bytes consumed by the prototype and be a multiple of the language specified instruction alignment.

      NOTE: Use of the feature with a delay slot instruction is discouraged.

      Specified by:
      setLengthOverride in interface Instruction
      Parameters:
      length - effective instruction code unit length.
    • isLengthOverridden

      public boolean isLengthOverridden()
      Description copied from interface: Instruction
      Determine if an instruction length override has been set.
      Specified by:
      isLengthOverridden in interface Instruction
      Returns:
      true if length override has been set else false.
    • setFlowOverride

      public void setFlowOverride(FlowOverride flowOverride)
      Description copied from interface: Instruction
      Set the flow override for this instruction.
      Specified by:
      setFlowOverride in interface Instruction
      Parameters:
      flowOverride - flow override setting or FlowOverride.NONE to clear.
    • getPcode

      public PcodeOp[] getPcode()
      Description copied from interface: Instruction
      Get an array of PCode operations (micro code) that this instruction performs. Flow overrides are not factored into pcode.
      Specified by:
      getPcode in interface Instruction
      Returns:
      an array of Pcode operations, a zero length array if the language does not support PCode
    • getPcode

      public PcodeOp[] getPcode(boolean includeOverrides)
      Description copied from interface: Instruction
      Get an array of PCode operations (micro code) that this instruction performs. NOTE: If includeOverrides is true, unique temporary varnodes may be produced which vary in size to those produced for other instructions.
      Specified by:
      getPcode in interface Instruction
      Parameters:
      includeOverrides - if true any flow overrides will be factored into generated pcode.
      Returns:
      an array of Pcode operations, a zero length array if the language does not support PCode
    • getPcode

      public PcodeOp[] getPcode(int opIndex)
      Description copied from interface: Instruction
      Get an array of PCode operations (micro code) that a particular operand performs to compute its value.
      Specified by:
      getPcode in interface Instruction
      Parameters:
      opIndex - index of the operand to retrieve PCode
      Returns:
      an array of PCode operations, a zero length array if the language does not support PCode
    • getDelaySlotDepth

      public int getDelaySlotDepth()
      Description copied from interface: Instruction
      Get the number of delay slot instructions for this argument. This should be 0 for instructions which don't have a delay slot. This is used to support the delay slots found on some RISC processors such as SPARC and the PA-RISC. This returns an integer instead of a boolean in case some other processor executes more than one instruction from a delay slot.
      Specified by:
      getDelaySlotDepth in interface Instruction
      Returns:
      delay slot depth (number of instructions)
    • isInDelaySlot

      public boolean isInDelaySlot()
      Specified by:
      isInDelaySlot in interface Instruction
      Returns:
      true if this instruction was disassembled in a delay slot
    • getNext

      public Instruction getNext()
      Specified by:
      getNext in interface Instruction
      Returns:
      the instruction following this one in address order or null if none found.
    • getPrevious

      public Instruction getPrevious()
      Specified by:
      getPrevious in interface Instruction
      Returns:
      the instruction before this one in address order or null if none found.
    • setFallThrough

      public void setFallThrough(Address addr)
      Description copied from interface: Instruction
      Overrides the instruction's default fallthrough address to the given address. The given address may be null to indicate that the instruction has no fallthrough.
      Specified by:
      setFallThrough in interface Instruction
      Parameters:
      addr - the address to be used as this instructions fallthrough address. May be null.
    • clearFallThroughOverride

      public void clearFallThroughOverride()
      Description copied from interface: Instruction
      Restores this instruction's fallthrough address back to the default fallthrough for this instruction.
      Specified by:
      clearFallThroughOverride in interface Instruction
    • isFallThroughOverridden

      public boolean isFallThroughOverridden()
      Specified by:
      isFallThroughOverridden in interface Instruction
      Returns:
      true if this instructions fallthrough has been overriden.
    • getInstructionContext

      public InstructionContext getInstructionContext()
      Specified by:
      getInstructionContext in interface Instruction
      Returns:
      the instruction context for this instruction