Package ghidra.program.model.pcode
Class Varnode
- java.lang.Object
-
- ghidra.program.model.pcode.Varnode
-
- Direct Known Subclasses:
VarnodeAST
,VarnodeOperation
public class Varnode extends java.lang.Object
Rawest possible Varnode. Just a variable location and size, not part of a syntax tree. A raw varnode is said to be free, it is not attached to any variable.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static void
appendSpaceOffset(java.lang.StringBuilder buf, Address addr)
void
buildXML(java.lang.StringBuilder buf)
static java.lang.String
buildXMLAddress(Address addr)
Convert an address into an XML document.static java.lang.String
buildXMLAddress(Varnode[] varnodes, int logicalsize)
Convert a varnode array into an XML document.static void
buildXMLAddress(java.lang.StringBuilder resBuf, Address addr, int size)
Build an XML document representation of a varnode with the given address and size.boolean
contains(Address address)
Determine if this varnode contains the specified addressboolean
equals(java.lang.Object o)
Address
getAddress()
PcodeOp
getDef()
java.util.Iterator<PcodeOp>
getDescendants()
HighVariable
getHigh()
PcodeOp
getLoneDescend()
If there is only one PcodeOp taking this varnode as input, return it.short
getMergeGroup()
long
getOffset()
Address
getPCAddress()
Get the address where this varnode is defined or NO_ADDRESS if this varnode is an inputint
getSize()
int
getSpace()
long
getWordOffset()
Returns the word offset into the address space this is defined within The word size is defined in the Language's .slaspec file with the "WORDSIZE" argument when DEFINEing a memory SPACE (capitalization is for emphasis; the directives are actually lowercase).int
hashCode()
boolean
intersects(AddressSetView set)
Determine if this varnode intersects the specified address setboolean
intersects(Varnode varnode)
Determine if this varnode intersects another varnode.boolean
isAddress()
boolean
isAddrTied()
boolean
isConstant()
boolean
isFree()
boolean
isHash()
boolean
isInput()
boolean
isPersistant()
boolean
isRegister()
boolean
isUnaffected()
boolean
isUnique()
static Varnode
readXML(XmlPullParser parser, PcodeFactory factory)
Build a varnode from a SAX parse tree nodestatic Address
readXMLAddress(XmlElement el, AddressFactory addrFactory)
Create an address from a SAX parse tree node.static Address
readXMLAddress(java.lang.String addrstring, AddressFactory addrfactory, AddressSpace refSpace)
Parse an XML containing an address.static Address
readXMLAddress(java.lang.String localName, org.xml.sax.Attributes attr, AddressFactory addrFactory)
java.lang.String
toString()
java.lang.String
toString(Language language)
Convert this varnode to an alternate String representation based on a specified language.void
trim()
Trim a varnode in a constant space to the correct starting offset.
-
-
-
Method Detail
-
getSize
public int getSize()
- Returns:
- size of the varnode in bytes
-
getSpace
public int getSpace()
- Returns:
- the space this varnode belongs to (ram, register, ...)
-
getAddress
public Address getAddress()
- Returns:
- the address this varnode is attached to
-
getPCAddress
public Address getPCAddress()
Get the address where this varnode is defined or NO_ADDRESS if this varnode is an input- Returns:
- the address
-
getOffset
public long getOffset()
- Returns:
- the offset into the address space varnode is defined within
-
getWordOffset
public long getWordOffset()
Returns the word offset into the address space this is defined within The word size is defined in the Language's .slaspec file with the "WORDSIZE" argument when DEFINEing a memory SPACE (capitalization is for emphasis; the directives are actually lowercase).- Returns:
- the word offset into the address space this is defined within
-
isFree
public boolean isFree()
-
contains
public boolean contains(Address address)
Determine if this varnode contains the specified address- Parameters:
address
- the address for which to check- Returns:
- true if this varnode contains the specified address
-
intersects
public boolean intersects(Varnode varnode)
Determine if this varnode intersects another varnode.- Parameters:
varnode
- other varnode- Returns:
- true if this varnode intersects the specified varnode
-
intersects
public boolean intersects(AddressSetView set)
Determine if this varnode intersects the specified address set- Parameters:
set
- address set- Returns:
- true if this varnode intersects the specified address set
-
isAddress
public boolean isAddress()
- Returns:
- true if this varnode exists in a Memory space (vs. register etc...).
Keep in mind this varnode may also correspond to a defined register
if true is returned and
isRegister()
return false. Memory-based registers may be indirectly addressed which leads to the distinction with registers within the register space.
-
isRegister
public boolean isRegister()
- Returns:
- true if this varnode exists in a Register type space. If false is returned, keep in mind this varnode may still correspond to a defined register within a memory space. Memory-based registers may be indirectly addressed which leads to the distinction with registers within the register space.
-
isConstant
public boolean isConstant()
- Returns:
- true if this varnode is just a constant number
-
isUnique
public boolean isUnique()
- Returns:
- true if this varnode doesn't exist anywhere. A temporary variable.
-
isHash
public boolean isHash()
-
isInput
public boolean isInput()
- Returns:
- is input to a pcode op
-
isPersistant
public boolean isPersistant()
- Returns:
- is persistant
-
isAddrTied
public boolean isAddrTied()
- Returns:
- is mapped to an address
-
isUnaffected
public boolean isUnaffected()
-
getDef
public PcodeOp getDef()
- Returns:
- get the pcode op this varnode belongs to
-
getDescendants
public java.util.Iterator<PcodeOp> getDescendants()
- Returns:
- iterator to all PcodeOp s that take this as input
-
getLoneDescend
public PcodeOp getLoneDescend()
If there is only one PcodeOp taking this varnode as input, return it. Otherwise return null- Returns:
- the lone descendant PcodeOp
-
getHigh
public HighVariable getHigh()
- Returns:
- the high level variable this varnode represents
-
getMergeGroup
public short getMergeGroup()
- Returns:
- the index of the group, within the high containing this, that are forced merged with this
-
buildXML
public void buildXML(java.lang.StringBuilder buf)
- Parameters:
buf
- is the builder to which to append XML
-
buildXMLAddress
public static void buildXMLAddress(java.lang.StringBuilder resBuf, Address addr, int size)
Build an XML document representation of a varnode with the given address and size.- Parameters:
resBuf
- is the builder to which to append the XMLaddr
- location varnode is defined atsize
- size of the varnode.
-
buildXMLAddress
public static java.lang.String buildXMLAddress(Address addr)
Convert an address into an XML document.- Parameters:
addr
- -- Address to convert to XML- Returns:
- XML string
-
buildXMLAddress
public static java.lang.String buildXMLAddress(Varnode[] varnodes, int logicalsize)
Convert a varnode array into an XML document.- Parameters:
varnodes
- sequence of storage varnodeslogicalsize
- the logical size value of the varnode- Returns:
- XML string
-
appendSpaceOffset
public static void appendSpaceOffset(java.lang.StringBuilder buf, Address addr)
-
readXML
public static Varnode readXML(XmlPullParser parser, PcodeFactory factory) throws PcodeXMLException
Build a varnode from a SAX parse tree node- Parameters:
parser
- the parserfactory
- pcode factory used to create valid pcode- Returns:
- new varnode element based on info in the XML.
- Throws:
PcodeXMLException
-
trim
public void trim()
Trim a varnode in a constant space to the correct starting offset. Constant handles may contain constants of indeterminate size. This is where the size gets fixed, i.e. we mask off the constant to its proper size. A varnode that is ends up in pcode should call this method to ensure that varnodes always contains raw data. On the other hand, varnodes in handles are allowed to have offsets that violate size restrictions.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
toString
public java.lang.String toString(Language language)
Convert this varnode to an alternate String representation based on a specified language.- Parameters:
language
-- Returns:
- string representation
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
readXMLAddress
public static Address readXMLAddress(XmlElement el, AddressFactory addrFactory)
Create an address from a SAX parse tree node.- Parameters:
el
- SAX parse tree elementaddrFactory
- address factory used to create valid addresses- Returns:
- Address created from XML info
-
readXMLAddress
public static Address readXMLAddress(java.lang.String localName, org.xml.sax.Attributes attr, AddressFactory addrFactory)
-
readXMLAddress
public static Address readXMLAddress(java.lang.String addrstring, AddressFactory addrfactory, AddressSpace refSpace) throws PcodeXMLException
Parse an XML containing an address. The format options are simple enough that we don't try to invoke an actual XML parser but just walk the string- Parameters:
addrstring
- is the string containing the XML tagaddrfactory
- is the factory that can produce addressesrefSpace
- can be null but is otherwise the reference AddressSpace from which the request is sent.- Returns:
- the created Address or Address.NO_ADDRESS in some special cases
- Throws:
PcodeXMLException
-
-