Package ghidra.app.util
Class PseudoInstruction
java.lang.Object
ghidra.app.util.PseudoInstruction
- All Implemented Interfaces:
 InstructionContext,ProcessorContext,ProcessorContextView,CodeUnit,Instruction,MemBuffer,PropertySet
- Direct Known Subclasses:
 JitPassage.DecodeErrorInstruction
Pseudo (i.e., fake) instruction that is generated by the Disassembler.  This form of 
 has some limitation over an instruction which is obtained from a program listing.
 The instruction will completely cache all bytes corresponding to the prototype length
 at the specified address.  Additional bytes will be cached for delay-slotted instructions
 to facilitate pcode generation and obtaining general pcode related attributes.
- 
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Addressprotected byte[]protected Map<CommentType, String> protected static final Address[]protected static final Reference[]protected intprotected booleanprotected intprotected Addressprotected Programprotected ReferenceManagerFields inherited from interface ghidra.program.model.listing.CodeUnit
COMMENT_PROPERTY, DEFINED_DATA_PROPERTY, EOL_COMMENT, INSTRUCTION_PROPERTY, MNEMONIC, PLATE_COMMENT, POST_COMMENT, PRE_COMMENT, REPEATABLE_COMMENT, SPACE_PROPERTYFields inherited from interface ghidra.program.model.listing.Instruction
INVALID_DEPTH_CHANGE, MAX_LENGTH_OVERRIDE - 
Constructor Summary
ConstructorsConstructorDescriptionPseudoInstruction(AddressFactory addrFactory, Address addr, InstructionPrototype prototype, MemBuffer memBuffer, ProcessorContext procContext) Construct a new PseudoInstruction within a program.PseudoInstruction(Address addr, InstructionPrototype prototype, MemBuffer memBuffer, ProcessorContext procContext) Construct a new PseudoInstruction without a program (flow override not supported).PseudoInstruction(Program program, Address addr, InstructionPrototype prototype, MemBuffer memBuffer, ProcessorContext procContext) Construct a new PseudoInstruction within a program. - 
Method Summary
Modifier and TypeMethodDescriptionvoidaddMnemonicReference(Address refAddr, RefType refType, SourceType sourceType) Add a reference to the mnemonic for this code unit.voidaddOperandReference(int opIndex, Address refAddr, RefType type, SourceType sourceType) Add a user defined reference to the operand at the given index.voidRestores this instruction's fallthrough address back to the default fallthrough for this instruction.voidclearRegister(Register register) Clears the register within this context.intCompares the given address to the address range of this node.booleanDetermines if this code unit contains the indicated address.booleanGet the Address which corresponds to the offset 0.getAddress(int opIndex) Get the Address for the given operand index if one exists.getAddressString(boolean showBlockName, boolean pad) Get the string representation of the starting address for this code unit.getBigInteger(int offset, int size, boolean signed) returns the value at the given offset, taking into account the endianness.bytegetByte(int offset) Get one byte from memory at the current position plus offset.byte[]getBytes()Gets the bytes for this code unit.intgetBytes(byte[] b, int offset) Readsb.lengthbytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position.voidgetBytesInCodeUnit(byte[] buffer, int bufferOffset) Copies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.getComment(CommentType commentType) Get the comment for the given typeString[]getCommentAsArray(CommentType commentType) Get the comment as an array where each element is a single line for the given type.Get the default fallthrough for this instruction.intGet default fall-through offset in bytes from start of instruction to the fallthrough instruction.Address[]Get an array of Address objects for all default flows established by the underlying instruction prototype.getDefaultOperandRepresentation(int opIndex) Get the operand representation for the given operand index without markup.getDefaultOperandRepresentationList(int opIndex) Get the operand representation for the given operand index.intGet the number of delay slot instructions for this argument.getExternalReference(int opIndex) Gets the external reference (if any) at the opIndexGet the fallthrough for this instruction, factoring in any fallthrough override and delay slotted instructions.Address[]getFlows()Get an array of Address objects for all flows other than a fall-through.Object[]Get the Input objects used by this instruction.intgetInt(int offset) returns the int at the given offset, taking into account the endianness.intgetIntProperty(String name) Get the int property for name.getLabel()Deprecated.final intGet the length of the code unit.longgetLong(int offset) returns the long at the given offset, taking into account the endianness.Get the ending address for this code unit.Get the read-only memory buffer containing the instruction bytes.Get the Memory object actually used by the MemBuffer.Get the starting address for this code unit.Get references for the mnemonic for this instruction.Returns the mnemonic for this code unit, e.g., MOV, JMP.getNext()Returns the code unit after this code unit..intReturns the number of operands for this code unit..getObjectProperty(String name) Get the object property for name; returns null if there is no name property for this code unit.getOperandReferences(int opIndex) Get the references for the operand index.getOperandRefType(int opIndex) Get the operand reference type for the given operand index.intgetOperandType(int opIndex) Get the type of a specific operand.Object[]getOpObjects(int opIndex) Get objects used by this operand (Address, Scalar, Register ...)byte[]Get the actual bytes parsed when forming this instruction.intGet the actual number of bytes parsed when forming this instruction.Get the instruction parser context for the instruction which corresponds to this context object.getParserContext(Address instructionAddress) Get the instruction parser context which corresponds to the specified instruction address.PcodeOp[]getPcode()Get an array of PCode operations (micro code) that this instruction performs.PcodeOp[]getPcode(boolean includeOverrides) Get an array of PCode operations (micro code) that this instruction performs.PcodeOp[]getPcode(int opIndex) Get an array of PCode operations (micro code) that a particular operand performs to compute its value.Returns the code unit before this code unit..getPrimaryReference(int index) Returns the primary reference for the operand index..Get the primary Symbol for this code unit.Get the read-only processor context containing the context-register state state at the corresponding instruction.Returns the program that generated this CodeUnit..Returns an iterator over all references TO this code unit..Get ALL reference FROM this code unit.getRegister(int opIndex) If operand is a pure Register, return the register.getRegister(String name) Get a Register given the name of a registerReturns all the Registers for the processor as an unmodifiable listgetRegisterValue(Register register) Get the RegisterValue for the given register.Return the byte value repeated for all bytes within this instruction or null if byte values vary.Object[]Get the Result objects produced/affected by this instruction These would probably only be Register or AddressgetScalar(int opIndex) Returns the scalar at the given operand index.getSeparator(int opIndex) Get the separator strings between an operand.shortgetShort(int offset) returns the short at the given offset, taking into account the endianness.getStackReference(int opIndex) getStringProperty(String name) Get the string property for name; returns null if there is no name property for this code unit.Symbol[]Get the symbols for this code unit.Get the contents of a processor register as a BigInteger objectbooleangetVoidProperty(String name) Returns whether this code unit is marked as having the name property.booleaninthashCode()booleanhasProperty(String name) Returns true if the codeunit has the given property defined.booleanReturns true if a value is defined for the given register.voidInvalidate memory bufferbooleanReturns true if the underlying bytes are in big-endian order, false if they are little endian.booleanbooleanbooleanbooleanDetermine if an instruction length override has been set.booleanisValid()Get an iterator over the property names which have values applied.protected voidvoidremoveExternalReference(int opIndex) Remove external reference (if any) at the given opIndexvoidremoveMnemonicReference(Address refAddr) Remove a reference to the mnemonic for this instruction.voidremoveOperandReference(int opIndex, Address refAddr) Remove a user defined reference to the operand at opIndex.voidremoveProperty(String name) Remove the property value with the given name for this code unit.voidremoveStackReference(int opIndex) voidsetComment(CommentType commentType, String comment) Set the comment for the given type.voidsetCommentAsArray(CommentType commentType, String[] comment) Set the comment for the given type.voidvoidsetFallThrough(Address addr) Overrides the instruction's default fallthrough address to the given address.voidsetFlowOverride(FlowOverride flowOverride) Set the flow override for this instruction.voidvoidsetLengthOverride(int length) Set instruction length override.voidsetMemoryReference(int opIndex, Address refAddr, RefType refType) voidSets a memory reference to be the primary reference at its address/opIndex location.voidsetProperty(String name) Mark the property name as having a value for this code unit.voidsetProperty(String name, int value) Set the property name with the given value for this code unit.voidsetProperty(String name, Saveable value) Set the property name with the given value for this code unit.voidsetProperty(String name, String value) Set the property name with the given value for this code unit.voidsetRegisterReference(int opIndex, Register reg, SourceType sourceType, RefType refType) Sets a register reference at theoffseton 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 referencevoidsetRegisterValue(RegisterValue value) Sets the specified register value within this context.voidsetStackReference(int opIndex, int offset, SourceType sourceType, RefType refType) Sets a stack reference at theoffseton 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 referencevoidsetValue(Register register, BigInteger value) Sets the value for a Register.toString()Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface ghidra.program.model.listing.CodeUnit
addMnemonicReference, addOperandReference, compareTo, contains, getAddressString, getBytes, getBytesInCodeUnit, getComment, getComment, getCommentAsArray, getCommentAsArray, getExternalReference, getLabel, getLength, getMaxAddress, getMinAddress, getMnemonicReferences, getPrimaryReference, getPrimarySymbol, getProgram, getReferenceIteratorTo, getReferencesFrom, getSymbols, removeExternalReference, removeMnemonicReference, removeOperandReference, setComment, setComment, setCommentAsArray, setCommentAsArray, setPrimaryMemoryReference, setRegisterReference, setStackReferenceMethods inherited from interface ghidra.program.model.lang.InstructionContext
getAddressMethods inherited from interface ghidra.program.model.mem.MemBuffer
getAddress, getBigInteger, getByte, getBytes, getInputStream, getInputStream, getInt, getLong, getMemory, getShort, getUnsignedByte, getUnsignedInt, getUnsignedShort, getVarLengthInt, getVarLengthUnsignedInt, isBigEndian, isInitializedMemoryMethods inherited from interface ghidra.program.model.util.PropertySet
getIntProperty, getObjectProperty, getStringProperty, getVoidProperty, hasProperty, propertyNames, removeProperty, setProperty, setProperty, setProperty, setProperty 
- 
Field Details
- 
address
 - 
maxAddress
 - 
program
 - 
length
protected int length - 
emptyAddrArray
 - 
hash
protected int hash - 
bytes
protected byte[] bytes - 
isBigEndian
protected boolean isBigEndian - 
emptyMemRefs
 - 
comments
 - 
refMgr
 
 - 
 - 
Constructor Details
- 
PseudoInstruction
public PseudoInstruction(Program program, Address addr, InstructionPrototype prototype, MemBuffer memBuffer, ProcessorContext procContext) throws AddressOverflowException Construct a new PseudoInstruction within a program.- Parameters:
 program- is the given Programaddr- address of the instructionprototype- prototype of the instructionmemBuffer- buffer containing the bytes for the instructionprocContext- processor state information during disassembly- Throws:
 AddressOverflowException- if code unit length causes wrap within space
 - 
PseudoInstruction
public PseudoInstruction(AddressFactory addrFactory, Address addr, InstructionPrototype prototype, MemBuffer memBuffer, ProcessorContext procContext) throws AddressOverflowException Construct a new PseudoInstruction within a program.- Parameters:
 addrFactory- program/language address factoryaddr- address of the instructionprototype- prototype of the instructionmemBuffer- buffer containing the bytes for the instructionprocContext- processor state information during disassembly- Throws:
 AddressOverflowException- if code unit length causes wrap within space
 - 
PseudoInstruction
public PseudoInstruction(Address addr, InstructionPrototype prototype, MemBuffer memBuffer, ProcessorContext procContext) throws AddressOverflowException Construct a new PseudoInstruction without a program (flow override not supported).- Parameters:
 addr- address of the instructionprototype- prototype of the instructionmemBuffer- buffer containing the bytes for the instructionprocContext- processor state information during disassembly- Throws:
 AddressOverflowException- if code unit length causes wrap within space
 
 - 
 - 
Method Details
- 
getRepeatedByte
Return the byte value repeated for all bytes within this instruction or null if byte values vary.- Returns:
 - repeated byte value or null if bytes vary
 
 - 
getParsedLength
public int getParsedLength()Description copied from interface:InstructionGet the actual number of bytes parsed when forming this instruction. While this method will generally return the same value asCodeUnit.getLength(), its value will differ whenInstruction.setLengthOverride(int)has been used. In addition, it is important to note thatCodeUnit.getMaxAddress()will always reflect a non-overlapping address which reflectsCodeUnit.getLength(). This method is equivalent to the following code for a given instruction:
InstructionPrototypeproto = instruction.Instruction.getPrototype(); int length = proto.getLength();- Specified by:
 getParsedLengthin interfaceInstruction- Returns:
 - the actual number of bytes parsed when forming this instruction
 
 - 
getParsedBytes
Description copied from interface:InstructionGet the actual bytes parsed when forming this instruction. While this method will generally return the same value asCodeUnit.getBytes(), it will return more bytes whenInstruction.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:
InstructionPrototypeproto = instruction.Instruction.getPrototype();Memorymem = instruction.MemBuffer.getMemory(); byte[] bytes = mem.getBytes(instruction.MemBuffer.getAddress(), proto.getLength()); int length = proto.getLength();- Specified by:
 getParsedBytesin interfaceInstruction- Returns:
 - the actual number of bytes parsed when forming this instruction
 - Throws:
 MemoryAccessException- if the full number of bytes could not be read
 - 
getBaseContextRegister
- Specified by:
 getBaseContextRegisterin interfaceProcessorContextView- Returns:
 - the base processor context register or null if one has not been defined
 
 - 
getOperandReferences
Get the references for the operand index. If the operand type is a register, then the user defined references are returned; otherwise an array with the address for the operand value is returned.- Specified by:
 getOperandReferencesin interfaceCodeUnit- Parameters:
 opIndex- operand index (0 is the first operand)- Returns:
 - the references for the operand index.
 
 - 
equals
 - 
getPrototype
- Specified by:
 getPrototypein interfaceInstruction- Returns:
 - the prototype for this instruction.
 
 - 
getMnemonicString
Description copied from interface:CodeUnitReturns the mnemonic for this code unit, e.g., MOV, JMP.- Specified by:
 getMnemonicStringin interfaceCodeUnit- Returns:
 - the mnemonic for this code unit, e.g., MOV, JMP
 
 - 
getNumOperands
public int getNumOperands()Description copied from interface:CodeUnitReturns the number of operands for this code unit..- Specified by:
 getNumOperandsin interfaceCodeUnit- Returns:
 - the number of operands for this code unit.
 
 - 
getAddress
Description copied from interface:CodeUnitGet the Address for the given operand index if one exists. Data objects have one operand (the value).- Specified by:
 getAddressin interfaceCodeUnit- 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
Description copied from interface:CodeUnitReturns the scalar at the given operand index. Data objects have one operand (the value). - 
getRegister
Description copied from interface:InstructionIf operand is a pure Register, return the register.- Specified by:
 getRegisterin interfaceInstruction- Parameters:
 opIndex- index of the operand.- Returns:
 - A register if the operand represents a register.
 
 - 
getOpObjects
Description copied from interface:InstructionGet objects used by this operand (Address, Scalar, Register ...)- Specified by:
 getOpObjectsin interfaceInstruction- Parameters:
 opIndex- index of the operand.- Returns:
 - objects used by this operand (Address, Scalar, Register ...)
 
 - 
getInputObjects
Description copied from interface:InstructionGet the Input objects used by this instruction. These could be Scalars, Registers, Addresses- Specified by:
 getInputObjectsin interfaceInstruction- Returns:
 - an array of objects that are used by this instruction
 
 - 
getResultObjects
Description copied from interface:InstructionGet the Result objects produced/affected by this instruction These would probably only be Register or Address- Specified by:
 getResultObjectsin interfaceInstruction- Returns:
 - an array of objects that are affected by this instruction
 
 - 
getDefaultOperandRepresentation
Description copied from interface:InstructionGet the operand representation for the given operand index without markup.- Specified by:
 getDefaultOperandRepresentationin interfaceInstruction- Parameters:
 opIndex- operand index- Returns:
 - operand represented as a string.
 
 - 
getDefaultOperandRepresentationList
Description copied from interface:InstructionGet the operand representation for the given operand index. A list of Register, Address, Scalar, Character and String objects is returned - without markup!- Specified by:
 getDefaultOperandRepresentationListin interfaceInstruction- Parameters:
 opIndex- operand index- Returns:
 - ArrayList of pieces of the operand representation. Unsupported languages may return null.
 
 - 
getOperandType
public int getOperandType(int opIndex) Description copied from interface:InstructionGet the type of a specific operand.- Specified by:
 getOperandTypein interfaceInstruction- Parameters:
 opIndex- the index of the operand. (zero based)- Returns:
 - the type of the operand.
 - See Also:
 
 - 
getOperandRefType
Description copied from interface:InstructionGet the operand reference type for the given operand index.- Specified by:
 getOperandRefTypein interfaceInstruction- Parameters:
 opIndex- operand index- Returns:
 - the operand reference type for the given operand index.
 
 - 
getFallThrough
Description copied from interface:InstructionGet the fallthrough for this instruction, factoring in any fallthrough override and delay slotted instructions.- Specified by:
 getFallThroughin interfaceInstruction- Returns:
 - fall-through address or null if instruction has no fallthrough
 
 - 
getDefaultFallThroughOffset
public int getDefaultFallThroughOffset()Description copied from interface:InstructionGet 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:
 getDefaultFallThroughOffsetin interfaceInstruction- Returns:
 - default fall-through offset or zero (0) if instruction has no fallthrough
 
 - 
getDefaultFallThrough
Description copied from interface:InstructionGet the default fallthrough for this instruction. This accounts for any instructions contained with delay slots.- Specified by:
 getDefaultFallThroughin interfaceInstruction- Returns:
 - fall-through address or null if instruction has no default fallthrough
 
 - 
getFallFrom
- Specified by:
 getFallFromin interfaceInstruction- 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
Description copied from interface:InstructionGet 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:
 getFlowsin interfaceInstruction- Returns:
 - flow addresses or null if there are no flows
 
 - 
getDefaultFlows
Description copied from interface:InstructionGet an array of Address objects for all default flows established by the underlying instruction prototype. References are ignored.- Specified by:
 getDefaultFlowsin interfaceInstruction- Returns:
 - flow addresses or null if there are no flows
 
 - 
getFlowType
- Specified by:
 getFlowTypein interfaceInstruction- Returns:
 - the flow type of this instruction (how this instruction flows to the next instruction).
 
 - 
getPcode
Description copied from interface:InstructionGet an array of PCode operations (micro code) that this instruction performs. Flow overrides are not factored into pcode.- Specified by:
 getPcodein interfaceInstruction- Returns:
 - an array of Pcode operations, a zero length array if the language does not support PCode
 
 - 
getPcode
Description copied from interface:InstructionGet 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:
 getPcodein interfaceInstruction- 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
Description copied from interface:InstructionGet an array of PCode operations (micro code) that a particular operand performs to compute its value.- Specified by:
 getPcodein interfaceInstruction- 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:InstructionGet 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:
 getDelaySlotDepthin interfaceInstruction- Returns:
 - delay slot depth (number of instructions)
 
 - 
isInDelaySlot
public boolean isInDelaySlot()- Specified by:
 isInDelaySlotin interfaceInstruction- Returns:
 - true if this instruction was disassembled in a delay slot
 
 - 
getNext
- Specified by:
 getNextin interfaceInstruction- Returns:
 - the instruction following this one in address order or null if none found.
 
 - 
getPrevious
- Specified by:
 getPreviousin interfaceInstruction- Returns:
 - the instruction before this one in address order or null if none found.
 
 - 
toString
 - 
clearFallThroughOverride
public void clearFallThroughOverride()Description copied from interface:InstructionRestores this instruction's fallthrough address back to the default fallthrough for this instruction.- Specified by:
 clearFallThroughOverridein interfaceInstruction
 - 
setFallThrough
Description copied from interface:InstructionOverrides 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:
 setFallThroughin interfaceInstruction- Parameters:
 addr- the address to be used as this instructions fallthrough address. May be null.
 - 
getFlowOverride
- Specified by:
 getFlowOverridein interfaceInstruction- Returns:
 - the flow override which may have been set on this instruction.
 
 - 
setFlowOverride
Description copied from interface:InstructionSet the flow override for this instruction.- Specified by:
 setFlowOverridein interfaceInstruction- Parameters:
 flowOverride- flow override setting orFlowOverride.NONEto clear.
 - 
setLengthOverride
public void setLengthOverride(int length) Description copied from interface:InstructionSet 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:
 setLengthOverridein interfaceInstruction- Parameters:
 length- effective instruction code unit length.
 - 
isLengthOverridden
public boolean isLengthOverridden()Description copied from interface:InstructionDetermine if an instruction length override has been set.- Specified by:
 isLengthOverriddenin interfaceInstruction- Returns:
 - true if length override has been set else false.
 
 - 
isFallThroughOverridden
public boolean isFallThroughOverridden()- Specified by:
 isFallThroughOverriddenin interfaceInstruction- Returns:
 - true if this instructions fallthrough has been overriden.
 
 - 
hasFallthrough
public boolean hasFallthrough()- Specified by:
 hasFallthroughin interfaceInstruction- Returns:
 - true if this instruction has a fall-through flow.
 
 - 
isFallthrough
public boolean isFallthrough()- Specified by:
 isFallthroughin interfaceInstruction- Returns:
 - true if this instruction has no execution flow other than fall-through.
 
 - 
getSeparator
Description copied from interface:InstructionGet 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:
 getSeparatorin interfaceInstruction- Parameters:
 opIndex- valid values are 0 thru numOperands+1- Returns:
 - separator string, or null if there is no string
 
 - 
hasValue
Description copied from interface:ProcessorContextViewReturns true if a value is defined for the given register.- Specified by:
 hasValuein interfaceProcessorContextView- Parameters:
 register- the register to check for a value.- Returns:
 - true if the given register has a value.
 
 - 
getValue
Description copied from interface:ProcessorContextViewGet the contents of a processor register as a BigInteger object- Specified by:
 getValuein interfaceProcessorContextView- 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
Description copied from interface:ProcessorContextViewGet the RegisterValue for the given register.- Specified by:
 getRegisterValuein interfaceProcessorContextView- Parameters:
 register- register to get the value for- Returns:
 - RegisterValue object containing the value of the register if a value exists, otherwise null.
 
 - 
getRegister
Description copied from interface:ProcessorContextViewGet a Register given the name of a register- Specified by:
 getRegisterin interfaceProcessorContextView- Parameters:
 name- the name of the register.- Returns:
 - The register with the given name.
 
 - 
getRegisters
Description copied from interface:ProcessorContextViewReturns all the Registers for the processor as an unmodifiable list- Specified by:
 getRegistersin interfaceProcessorContextView- Returns:
 - all the Registers for the processor
 
 - 
setValue
Description copied from interface:ProcessorContextSets the value for a Register.- Specified by:
 setValuein interfaceProcessorContext- Parameters:
 register- the register to have its value setvalue- the value for the register (null is not permitted).- Throws:
 ContextChangeException- an illegal attempt to change context was made
 - 
setRegisterValue
Description copied from interface:ProcessorContextSets the specified register value within this context.- Specified by:
 setRegisterValuein interfaceProcessorContext- Parameters:
 value- register value- Throws:
 ContextChangeException- an illegal attempt to change context was made
 - 
clearRegister
Description copied from interface:ProcessorContextClears the register within this context.- Specified by:
 clearRegisterin interfaceProcessorContext- Parameters:
 register- register to be cleared.- Throws:
 ContextChangeException- an illegal attempt to change context was made
 - 
getProcessorContext
Description copied from interface:InstructionContextGet the read-only processor context containing the context-register state state at the corresponding instruction. This is primarily used during the parse phase to provide the initial context-register state.- Specified by:
 getProcessorContextin interfaceInstructionContext- Returns:
 - the read-only processor context
 
 - 
getMemBuffer
Description copied from interface:InstructionContextGet the read-only memory buffer containing the instruction bytes. Its position will correspond to the instruction address.- Specified by:
 getMemBufferin interfaceInstructionContext- Returns:
 - instruction memory buffer
 
 - 
getParserContext
Description copied from interface:InstructionContextGet the instruction parser context for the instruction which corresponds to this context object.- Specified by:
 getParserContextin interfaceInstructionContext- Returns:
 - the instruction parser context for the instruction which corresponds to this context object.
 - Throws:
 MemoryAccessException- if memory error occurred while resolving instruction details.
 - 
getParserContext
public ParserContext getParserContext(Address instructionAddress) throws UnknownContextException, MemoryAccessException Description copied from interface:InstructionContextGet the instruction parser context which corresponds to the specified instruction address. This may be obtained via either caching or by parsing the instruction at the specified address. The returned ParserContext may be cast to the prototype's implementation without checking. This method will throw an UnknownContextException if a compatible ParserContext is not found at the specified address.- Specified by:
 getParserContextin interfaceInstructionContext- Parameters:
 instructionAddress- instruction address of requested context- Returns:
 - the instruction parser context at the specified instruction address
 - Throws:
 UnknownContextException- if the instruction at the specified address was not previously parsed or attempting to instantiate context resulted in an exception.MemoryAccessException- if memory error occurred while resolving instruction details.
 - 
getInstructionContext
- Specified by:
 getInstructionContextin interfaceInstruction- Returns:
 - the instruction context for this instruction
 
 - 
setInstructionBlock
 - 
invalidate
public void invalidate()Invalidate memory buffer - 
isValid
public boolean isValid() - 
getAddressString
Description copied from interface:CodeUnitGet the string representation of the starting address for this code unit.- Specified by:
 getAddressStringin interfaceCodeUnit- Parameters:
 showBlockName- true if the string should include the memory block namepad- 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
 
 - 
getLength
public final int getLength()Get the length of the code unit. - 
refreshIfNeeded
protected void refreshIfNeeded() - 
getBytes
Gets the bytes for this code unit.- Specified by:
 getBytesin interfaceCodeUnit- 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.
 - 
getBytes
public int getBytes(byte[] b, int offset) Description copied from interface:MemBufferReadsb.lengthbytes 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:
 getBytesin interfaceMemBuffer- Parameters:
 b- the buffer into which bytes will be placedoffset- 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.
 
 - 
getBytesInCodeUnit
Description copied from interface:CodeUnitCopies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.- Specified by:
 getBytesInCodeUnitin interfaceCodeUnit- Parameters:
 buffer- byte array to copy intobufferOffset- offset in byte array the copy will start- Throws:
 MemoryAccessException- if the full number of bytes could not be read.
 - 
isBigEndian
public boolean isBigEndian()Description copied from interface:MemBufferReturns true if the underlying bytes are in big-endian order, false if they are little endian.- Specified by:
 isBigEndianin interfaceMemBuffer- Returns:
 - true if the underlying bytes are in big-endian order, false if they are little endian.
 
 - 
getShort
Description copied from interface:MemBufferreturns the short at the given offset, taking into account the endianness.- Specified by:
 getShortin interfaceMemBuffer- 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
Description copied from interface:MemBufferreturns the int at the given offset, taking into account the endianness.- Specified by:
 getIntin interfaceMemBuffer- 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
Description copied from interface:MemBufferreturns the long at the given offset, taking into account the endianness.- Specified by:
 getLongin interfaceMemBuffer- 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
Description copied from interface:MemBufferreturns the value at the given offset, taking into account the endianness.- Specified by:
 getBigIntegerin interfaceMemBuffer- Parameters:
 offset- the offset from the membuffers origin (the address that it is set at)size- the number of bytes to include in the valuesigned- 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
 - 
setProperty
Set the property name with the given value for this code unit.- Specified by:
 setPropertyin interfacePropertySet- Parameters:
 name- the name of the property to save.value- the value of the property to save.- Throws:
 TypeMismatchException- if the property manager for name does not support object typesConcurrentModificationException- if this object is no longer valid.
 - 
setProperty
Set the property name with the given value for this code unit.- Specified by:
 setPropertyin interfacePropertySet- Parameters:
 name- the name of the property to save.value- the value of the property to save.- Throws:
 TypeMismatchException- if the property manager for name does not support string typesConcurrentModificationException- if this object is no longer valid.
 - 
setProperty
Set the property name with the given value for this code unit.- Specified by:
 setPropertyin interfacePropertySet- Parameters:
 name- the name of the property to save.value- the value of the property to save.- Throws:
 TypeMismatchException- if the property manager for name does not support int typesConcurrentModificationException- if this object is no longer valid.
 - 
setProperty
Mark the property name as having a value for this code unit.- Specified by:
 setPropertyin interfacePropertySet- Parameters:
 name- the name of the property to save.- Throws:
 TypeMismatchException- if the property manager for name does not support void typesConcurrentModificationException- if this object is no longer valid.
 - 
getObjectProperty
Get the object property for name; returns null if there is no name property for this code unit.- Specified by:
 getObjectPropertyin interfacePropertySet- Parameters:
 name- the name of the property.- Returns:
 Saveableproperty value, with map-specific implementation class, or null.- Throws:
 TypeMismatchException- if the property manager for name does not support object typesConcurrentModificationException- if this object is no longer valid.
 - 
getStringProperty
Get the string property for name; returns null if there is no name property for this code unit.- Specified by:
 getStringPropertyin interfacePropertySet- Parameters:
 name- the name of the property.- Returns:
 - string property value or null
 - Throws:
 TypeMismatchException- if the property manager for name does not support string typesConcurrentModificationException- if this object is no longer valid.
 - 
getIntProperty
Get the int property for name.- Specified by:
 getIntPropertyin interfacePropertySet- 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 unitTypeMismatchException- if the property manager for name does not support int typesConcurrentModificationException- if this object is no longer valid.
 - 
hasProperty
Description copied from interface:PropertySetReturns true if the codeunit has the given property defined. This method works for all property map types.- Specified by:
 hasPropertyin interfacePropertySet- Parameters:
 name- the name of the property- Returns:
 - true if property has been set, else false
 
 - 
getVoidProperty
Returns whether this code unit is marked as having the name property.- Specified by:
 getVoidPropertyin interfacePropertySet- Parameters:
 name- the name of the property.- Returns:
 - true if property has been set, else false
 - Throws:
 TypeMismatchException- if the property manager for name does not support void typesConcurrentModificationException- if this object is no longer valid.
 - 
propertyNames
Description copied from interface:PropertySetGet an iterator over the property names which have values applied.- Specified by:
 propertyNamesin interfacePropertySet- Returns:
 - iterator of all property map names which have values applied
 
 - 
removeProperty
Remove the property value with the given name for this code unit.- Specified by:
 removePropertyin interfacePropertySet- Parameters:
 name- the name of the property.
 - 
getLabel
Deprecated.Get the label for this code unit.- Specified by:
 getLabelin interfaceCodeUnit- Returns:
 - the label for this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getSymbols
Get the symbols for this code unit.- Specified by:
 getSymbolsin interfaceCodeUnit- Returns:
 - the Symbols for this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getPrimarySymbol
Get the primary Symbol for this code unit.- Specified by:
 getPrimarySymbolin interfaceCodeUnit- Returns:
 - the Primary Symbol for this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getMinAddress
Get the starting address for this code unit.- Specified by:
 getMinAddressin interfaceCodeUnit- Returns:
 - the starting address for this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getMaxAddress
Get the ending address for this code unit.- Specified by:
 getMaxAddressin interfaceCodeUnit- Returns:
 - the ending address for this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getNextCodeUnit
Returns the code unit after this code unit..- Returns:
 - the code unit after this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getPreviousCodeUnit
Returns the code unit before this code unit..- Returns:
 - the code unit before this code unit.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getComment
Description copied from interface:CodeUnitGet the comment for the given type- Specified by:
 getCommentin interfaceCodeUnit- Parameters:
 commentType-comment type- Returns:
 - the comment string of the appropriate type or null if no comment of that type exists for this code unit
 
 - 
getCommentAsArray
Get the comment as an array where each element is a single line for the given type.- Specified by:
 getCommentAsArrayin interfaceCodeUnit- Parameters:
 commentType- must be either EOL_COMMENT_TYPE, PRE_COMMENT_TYPE, POST_COMMENT_TYPE, or PLATE_COMMENT_TYPE- 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.
 - Throws:
 IllegalArgumentException- if type is not one of the three types of comments supportedConcurrentModificationException- if this object is no longer valid.
 - 
setCommentAsArray
Set the comment for the given type.- Specified by:
 setCommentAsArrayin interfaceCodeUnit- Parameters:
 commentType- must be either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or PLATE_COMMENTcomment- the lines that make up the comment- Throws:
 IllegalArgumentException- if type is not one of the three types of comments supportedConcurrentModificationException- if this object is no longer valid.
 - 
setComment
Set the comment for the given type.- Specified by:
 setCommentin interfaceCodeUnit- Parameters:
 commentType- must be either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or PLATE_COMMENTcomment- the comment- Throws:
 IllegalArgumentException- if type is not one of the three types of comments supportedConcurrentModificationException- if this object is no longer valid.
 - 
contains
Determines if this code unit contains the indicated address.- Specified by:
 containsin interfaceCodeUnit- Parameters:
 testAddr- the address to test- Returns:
 - true if address is contained in the range.
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
compareTo
Compares the given address to the address range of this node.- Specified by:
 compareToin interfaceCodeUnit- Parameters:
 a- the address- Returns:
 - a negative integer if 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
 - Throws:
 ConcurrentModificationException- if this object is no longer valid.
 - 
getByte
Get one byte from memory at the current position plus offset.- Specified by:
 getBytein interfaceMemBuffer- Parameters:
 offset- the displacement from the current position.- Returns:
 - the data at offset from the current position.
 - Throws:
 AddressOutOfBoundsException- if offset exceeds address spaceIndexOutOfBoundsException- if offset is negativeMemoryAccessException- if memory cannot be read
 - 
getAddress
Get the Address which corresponds to the offset 0.- Specified by:
 getAddressin interfaceMemBuffer- Returns:
 - the current address of offset 0.
 
 - 
getMemory
Get the Memory object actually used by the MemBuffer. return the Memory used by this MemBuffer. - 
addMnemonicReference
Add a reference to the mnemonic for this code unit.- Specified by:
 addMnemonicReferencein interfaceCodeUnit- Parameters:
 refAddr- address of reference to addrefType- type of reference being addedsourceType- the source of this reference
 - 
getMnemonicReferences
Get references for the mnemonic for this instruction.- Specified by:
 getMnemonicReferencesin interfaceCodeUnit- Returns:
 - an array of memory references. A zero length array will be returned if there are no references for the mnemonic.
 
 - 
removeMnemonicReference
Remove a reference to the mnemonic for this instruction.- Specified by:
 removeMnemonicReferencein interfaceCodeUnit- Parameters:
 refAddr- the address to remove as a reference.
 - 
addOperandReference
Add a user defined reference to the operand at the given index.- Specified by:
 addOperandReferencein interfaceCodeUnit- Parameters:
 opIndex- operand indexrefAddr- reference addresstype- the reference type to be added.sourceType- the source of this reference- See Also:
 
 - 
removeOperandReference
Remove a user defined reference to the operand at opIndex.- Specified by:
 removeOperandReferencein interfaceCodeUnit- Parameters:
 opIndex- operand indexrefAddr- address referencing the operand
 - 
getReferencesFrom
Get ALL reference FROM this code unit.- Specified by:
 getReferencesFromin interfaceCodeUnit- Returns:
 - an array of memory references from this codeUnit or an empty array if there are no references.
 
 - 
setExternalReference
 - 
setMemoryReference
 - 
setStackReference
Description copied from interface:CodeUnitSets a stack reference at theoffseton 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:
 setStackReferencein interfaceCodeUnit- Parameters:
 opIndex- the index of the operand to set this stack referenceoffset- the (+/-) offset from stack base addresssourceType- the source of this referencerefType- type of reference, RefType.READ,WRITE,PTR...
 - 
setRegisterReference
Description copied from interface:CodeUnitSets a register reference at theoffseton 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:
 setRegisterReferencein interfaceCodeUnit- Parameters:
 opIndex- the index of the operand to set this register referencereg- a registersourceType- the source of this referencerefType- type of reference, RefType.READ,WRITE,PTR...
 - 
getPrimaryReference
Description copied from interface:CodeUnitReturns the primary reference for the operand index..- Specified by:
 getPrimaryReferencein interfaceCodeUnit- Parameters:
 index- operand index (0 is the first operand)- Returns:
 - the primary reference for the operand index.
 
 - 
setPrimaryMemoryReference
Description copied from interface:CodeUnitSets 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:
 setPrimaryMemoryReferencein interfaceCodeUnit- Parameters:
 ref- the reference to be set as primary.
 - 
getStackReference
 - 
removeStackReference
public void removeStackReference(int opIndex)  - 
getExternalReference
Description copied from interface:CodeUnitGets the external reference (if any) at the opIndex- Specified by:
 getExternalReferencein interfaceCodeUnit- 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:CodeUnitRemove external reference (if any) at the given opIndex- Specified by:
 removeExternalReferencein interfaceCodeUnit- Parameters:
 opIndex- the index of the operand from which to remove any external reference.
 - 
getReferenceIteratorTo
Description copied from interface:CodeUnitReturns an iterator over all references TO this code unit..- Specified by:
 getReferenceIteratorToin interfaceCodeUnit- Returns:
 - an iterator over all references TO this code unit.
 
 - 
getProgram
Description copied from interface:CodeUnitReturns the program that generated this CodeUnit..- Specified by:
 getProgramin interfaceCodeUnit- Returns:
 - the program that generated this CodeUnit.
 
 - 
hashCode
public int hashCode() 
 -