Class 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.
    • Constructor Detail

      • Varnode

        public Varnode​(Address a,
                       int sz)
        Parameters:
        a - location varnode attached to
        sz - size of varnode
      • Varnode

        public Varnode​(Address a,
                       int sz,
                       int symbolKey)
        Parameters:
        a - location varnode attached to
        sz - size of varnode
        symbolKey - associated symbol key
    • 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 XML
        addr - location varnode is defined at
        size - 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 varnodes
        logicalsize - the logical size value of the varnode
        Returns:
        XML string
      • appendSpaceOffset

        public static void appendSpaceOffset​(java.lang.StringBuilder buf,
                                             Address addr)
      • 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 class java.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 class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.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 element
        addrFactory - 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 tag
        addrfactory - is the factory that can produce addresses
        refSpace - 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