Package ghidra.program.model.listing
Interface CodeUnit
- All Superinterfaces:
MemBuffer,PropertySet
- All Known Subinterfaces:
Data,Instruction
- All Known Implementing Classes:
DataStub,InstructionDB,InstructionStub,PseudoData,PseudoInstruction
Interface common to both instructions and data.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringAny comment property.static final StringProperty name for code units that are defined datastatic final intcomment type for end of linestatic final StringProperty name for code units that are instructionsstatic final intIndicator for a mnemonic (versus an operand).static final intstatic final intProperty name for plate comment typestatic final intcomment type that follows after a code unitstatic final intcomment type that goes before a code unitstatic final intProperty name for repeatable comment typestatic final StringProperty name for vertical space formatting -
Method Summary
Modifier and TypeMethodDescriptionvoidaddMnemonicReference(Address refAddr, RefType refType, SourceType sourceType) Add a reference to the mnemonic for this code unit.voidaddOperandReference(int index, Address refAddr, RefType type, SourceType sourceType) Add a memory reference to the operand at the given index.intCompares the given address to the address range of this node.booleanReturns true if address is contained in the range of this codeUnitgetAddress(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.byte[]getBytes()Get the bytes that make up this code unit.voidgetBytesInCodeUnit(byte[] buffer, int bufferOffset) Copies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.getComment(int commentType) Get the comment for the given typeString[]getCommentAsArray(int commentType) Get the comment for the given type and parse it into an array of strings such that each line is its own string.getExternalReference(int opIndex) Gets the external reference (if any) at the opIndexgetLabel()Get the label for this code unit.intGet length of this code unit.Get the ending address for this code unit.Get the starting address for this code unit.Get references for the mnemonic for this code unit.Get the mnemonic for this code unit, e.g., MOV, JMPintGet the number of operands for this code unit.getOperandReferences(int index) Get the references for the operand index.getPrimaryReference(int index) Get the primary reference for the operand index.Get the Primary Symbol for this code unit.Returns the program that generated this CodeUnit.Get an iterator over all references TO this code unit.Get ALL memory references FROM this code unit.getScalar(int opIndex) Returns the scalar at the given operand index.Symbol[]Get the Symbols for this code unit.voidremoveExternalReference(int opIndex) Remove external reference (if any) at the given opIndex opIndex the index of the operand from which to remove any external reference.voidremoveMnemonicReference(Address refAddr) Remove a reference to the mnemonic for this code unit.voidremoveOperandReference(int index, Address refAddr) Remove a reference to the operand.voidsetComment(int commentType, String comment) Set the comment for the given comment type.voidsetCommentAsArray(int commentType, String[] comment) Set the comment (with each line in its own string) for the given comment typevoidSets a memory reference to be the primary reference at its address/opIndex location.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 referencevoidsetStackReference(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 referenceMethods 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
-
MNEMONIC
static final int MNEMONICIndicator for a mnemonic (versus an operand).- See Also:
-
NO_COMMENT
static final int NO_COMMENT- See Also:
-
EOL_COMMENT
static final int EOL_COMMENTcomment type for end of line- See Also:
-
PRE_COMMENT
static final int PRE_COMMENTcomment type that goes before a code unit- See Also:
-
POST_COMMENT
static final int POST_COMMENTcomment type that follows after a code unit- See Also:
-
PLATE_COMMENT
static final int PLATE_COMMENTProperty name for plate comment type- See Also:
-
REPEATABLE_COMMENT
static final int REPEATABLE_COMMENTProperty name for repeatable comment type- See Also:
-
COMMENT_PROPERTY
Any comment property.- See Also:
-
SPACE_PROPERTY
Property name for vertical space formatting- See Also:
-
INSTRUCTION_PROPERTY
Property name for code units that are instructions- See Also:
-
DEFINED_DATA_PROPERTY
Property name for code units that are defined data- See Also:
-
-
Method Details
-
getAddressString
Get the string representation of the starting address for this code unit.- 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
-
getLabel
String getLabel()Get the label for this code unit. -
getSymbols
Symbol[] getSymbols()Get the Symbols for this code unit.- Throws:
ConcurrentModificationException- if this object is no longer valid.
-
getPrimarySymbol
Symbol getPrimarySymbol()Get the Primary Symbol for this code unit.- Throws:
ConcurrentModificationException- if this object is no longer valid.
-
getMinAddress
Address getMinAddress()Get the starting address for this code unit. -
getMaxAddress
Address getMaxAddress()Get the ending address for this code unit. -
getMnemonicString
String getMnemonicString()Get the mnemonic for this code unit, e.g., MOV, JMP -
getComment
Get the comment for the given type- 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
- Throws:
IllegalArgumentException- if type is not one of the three types of comments supported
-
getCommentAsArray
Get the comment for the given type and parse it into an array of strings such that each line is its own string.- 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.
- Throws:
IllegalArgumentException- if type is not one of the three types of comments supported
-
setComment
Set the comment for the given comment type. Passingnullclears the comment- Parameters:
commentType- either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENTcomment- comment for code unit; null clears the comment- Throws:
IllegalArgumentException- if type is not one of the three types of comments supported
-
setCommentAsArray
Set the comment (with each line in its own string) for the given comment type- Parameters:
commentType- either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENTcomment- an array of strings where each string is a single line of the comment.- Throws:
IllegalArgumentException- if type is not one of the three types of comments supported
-
getLength
int getLength()Get length of this code unit. NOTE: If aninstruction length-overrideis set this method will return the reduced length.- Returns:
- code unit length
-
getBytes
Get the bytes that make up this code unit. NOTE: If aninstruction length-overrideis set this method will not return all bytes associated with theinstruction prototype.- 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.
-
getBytesInCodeUnit
Copies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.- 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.
-
contains
Returns true if address is contained in the range of this codeUnit- Parameters:
testAddr- the address to test.
-
compareTo
Compares the given address to the address range of this node.- 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
Add a reference to the mnemonic for this code unit.- Parameters:
refAddr- address to add as a reference.refType- the type of reference to add.sourceType- the source of this reference
-
removeMnemonicReference
Remove a reference to the mnemonic for this code unit.- Parameters:
refAddr- the address to remove as a reference.
-
getMnemonicReferences
Reference[] getMnemonicReferences()Get references for the mnemonic for this code unit.- Returns:
- an array of memory references. A zero length array will be returned if there are no references for the mnemonic.
-
getOperandReferences
Get the references for the operand index.- Parameters:
index- operand index (0 is the first operand)
-
getPrimaryReference
Get the primary reference for the operand index.- Parameters:
index- operand index (0 is the first operand)
-
addOperandReference
Add a memory reference to the operand at the given index.- Parameters:
index- operand indexrefAddr- reference addresstype- the reference type to be added.sourceType- the source of this reference
-
removeOperandReference
Remove a reference to the operand.- Parameters:
index- operand indexrefAddr- address referencing the operand
-
getReferencesFrom
Reference[] getReferencesFrom()Get ALL memory references FROM this code unit.- Returns:
- an array of memory references from this codeUnit or an empty array if there are no references.
-
getReferenceIteratorTo
ReferenceIterator getReferenceIteratorTo()Get an iterator over all references TO this code unit. -
getProgram
Program getProgram()Returns the program that generated this CodeUnit. -
getExternalReference
Gets the external reference (if any) at the opIndex- Parameters:
opIndex- the operand index to look for external references- Returns:
- the external reference at the operand or null if none exists.
-
removeExternalReference
void removeExternalReference(int opIndex) Remove external reference (if any) at the given opIndex opIndex the index of the operand from which to remove any external reference. -
setPrimaryMemoryReference
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.- Parameters:
ref- the reference to be set as primary.
-
setStackReference
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 reference- 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
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 reference- 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...
-
getNumOperands
int getNumOperands()Get the number of operands for this code unit. -
getAddress
Get the Address for the given operand index if one exists. Data objects have one operand (the value).- 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
Returns the scalar at the given operand index. Data objects have one operand (the value).- Parameters:
opIndex- index of the operand.- Returns:
- the scalar at the given operand index or null if no scalar exists at that index.
-