Package ghidra.program.model.pcode
Interface Decoder
- All Superinterfaces:
ByteIngest
- All Known Implementing Classes:
PackedDecode
,PackedDecodeOverlay
An interface for reading structured data from a stream
All data is loosely structured as with an XML document. A document contains a nested set
of elements, with labels corresponding to the ElementId class. A single element can hold
zero or more attributes and zero or more child elements. An attribute holds a primitive
data element (boolean, long, String) and is labeled by an AttributeId. The document is traversed
using a sequence of openElement() and closeElement() calls, intermixed with read*() calls to extract
the data. The elements are traversed in a depth first order. Attributes within an element can
be traversed in order using repeated calls to the getNextAttributeId() method, followed by a calls to
one of the read*(void) methods to extract the data. Alternately a read*(AttributeId) call can be used
to extract data for an attribute known to be in the element. There is a special content attribute
whose data can be extracted using a read*(AttributeId) call that is passed the special ATTRIB_CONTENT id.
This attribute will not be traversed by getNextAttributeId().
-
Method Summary
Modifier and TypeMethodDescriptionvoid
closeElement
(int id) Close the current element The data for the current element is considered fully processed.void
closeElementSkipping
(int id) Close the current element, skipping any child elements that have not yet been parsed.int
Get the next attribute id for the current element Attributes are automatically set up for traversal using this method, when the element is opened.int
Open (traverse into) the next child element of the current parent.int
openElement
(ElementId elemId) Open (traverse into) the next child element, which must be of a specific type The child becomes the current parent, and its attributes are initialized for use with getNextAttributeId.int
Peek at the next child element of the current parent, without traversing in (opening) it.boolean
readBool()
Parse the current attribute as a boolean value The last attribute, as returned by getNextAttributeId, is treated as a boolean, and its value is returned.boolean
readBool
(AttributeId attribId) Find and parse a specific attribute in the current element as a boolean value The set of attributes for the current element is searched for a match to the given attribute id.long
Parse the current attribute as a signed integer value The last attribute, as returned by getNextAttributeId, is treated as a signed integer, and its value is returned.long
readSignedInteger
(AttributeId attribId) Find and parse a specific attribute in the current element as a signed integer The set of attributes for the current element is searched for a match to the given attribute id.Parse the current attribute as an address space The last attribute, as returned by getNextAttributeId, is returned as an address space.readSpace
(AttributeId attribId) Find the specific attribute in the current element and return it as an address space Search attributes from the current element for a match to the given attribute id.Parse the current attribute as a string The last attribute, as returned by getNextAttributeId, is returned as a string.readString
(AttributeId attribId) Find the specific attribute in the current element and return it as a string The set of attributes for the current element is searched for a match to the given attribute id.long
Parse the current attribute as an unsigned integer value The last attribute, as returned by getNextAttributeId, is treated as an unsigned integer, and its value is returned.long
readUnsignedInteger
(AttributeId attribId) Find and parse a specific attribute in the current element as an unsigned integer The set of attributes for the current element is searched for a match to the given attribute id.void
Reset attribute traversal for the current element Attributes for a single element can be traversed more than once using the getNextAttributeId method.default void
Skip parsing of the next element The element skipped is the one that would be opened by the next call to openElement.Methods inherited from interface ghidra.program.model.pcode.ByteIngest
clear, endIngest, ingestStream, isEmpty, open
-
Method Details
-
getAddressFactory
AddressFactory getAddressFactory() -
peekElement
Peek at the next child element of the current parent, without traversing in (opening) it. The element id is returned, which can be compared to ElementId labels. If there are no remaining child elements to traverse, 0 is returned.- Returns:
- the element id or 0
- Throws:
DecoderException
- for an unexpected end of stream
-
openElement
Open (traverse into) the next child element of the current parent. The child becomes the current parent. The list of attributes is initialized for use with getNextAttributeId.- Returns:
- the id of the child element or 0 if there are no additional children
- Throws:
DecoderException
- for an unexpected end of stream
-
openElement
Open (traverse into) the next child element, which must be of a specific type The child becomes the current parent, and its attributes are initialized for use with getNextAttributeId. The child must match the given element id or an exception is thrown.- Parameters:
elemId
- is the given element id to match- Returns:
- the id of the child element
- Throws:
DecoderException
- if the expected element is not the next element
-
closeElement
Close the current element The data for the current element is considered fully processed. If the element has additional children, an exception is thrown. The stream must indicate the end of the element in some way.- Parameters:
id
- is the id of the element to close (which must be the current element)- Throws:
DecoderException
- if not at end of expected element
-
closeElementSkipping
Close the current element, skipping any child elements that have not yet been parsed. This closes the given element, which must be current. If there are child elements that have not been parsed, this is not considered an error, and they are skipped over in the parse.- Parameters:
id
- is the id of the element to close (which must be the current element)- Throws:
DecoderException
- if the indicated element is not the current element
-
getNextAttributeId
Get the next attribute id for the current element Attributes are automatically set up for traversal using this method, when the element is opened. If all attributes have been traversed (or there are no attributes), 0 is returned.- Returns:
- the id of the next attribute or 0
- Throws:
DecoderException
- for unexpected end of stream
-
rewindAttributes
void rewindAttributes()Reset attribute traversal for the current element Attributes for a single element can be traversed more than once using the getNextAttributeId method. -
readBool
Parse the current attribute as a boolean value The last attribute, as returned by getNextAttributeId, is treated as a boolean, and its value is returned.- Returns:
- the boolean value associated with the current attribute.
- Throws:
DecoderException
- if the expected value is not present
-
readBool
Find and parse a specific attribute in the current element as a boolean value The set of attributes for the current element is searched for a match to the given attribute id. This attribute is then parsed as a boolean and its value returned. If there is no attribute matching the id, an exception is thrown. Parsing via getNextAttributeId is reset.- Parameters:
attribId
- is the specific attribute id to match- Returns:
- the boolean value
- Throws:
DecoderException
- if the expected value is not present
-
readSignedInteger
Parse the current attribute as a signed integer value The last attribute, as returned by getNextAttributeId, is treated as a signed integer, and its value is returned.- Returns:
- the signed integer value associated with the current attribute.
- Throws:
DecoderException
- if the expected value is not present
-
readSignedInteger
Find and parse a specific attribute in the current element as a signed integer The set of attributes for the current element is searched for a match to the given attribute id. This attribute is then parsed as a signed integer and its value returned. If there is no attribute matching the id, an exception is thrown. Parsing via getNextAttributeId is reset.- Parameters:
attribId
- is the specific attribute id to match- Returns:
- the signed integer value
- Throws:
DecoderException
- if the expected value is not present
-
readUnsignedInteger
Parse the current attribute as an unsigned integer value The last attribute, as returned by getNextAttributeId, is treated as an unsigned integer, and its value is returned.- Returns:
- the unsigned integer value associated with the current attribute.
- Throws:
DecoderException
- if the expected value is not present
-
readUnsignedInteger
Find and parse a specific attribute in the current element as an unsigned integer The set of attributes for the current element is searched for a match to the given attribute id. This attribute is then parsed as an unsigned integer and its value returned. If there is no attribute matching the id, an exception is thrown. Parsing via getNextAttributeId is reset.- Parameters:
attribId
- is the specific attribute id to match- Returns:
- the unsigned integer value
- Throws:
DecoderException
- if the expected value is not present
-
readString
Parse the current attribute as a string The last attribute, as returned by getNextAttributeId, is returned as a string.- Returns:
- the string associated with the current attribute.
- Throws:
DecoderException
- if the expected value is not present
-
readString
Find the specific attribute in the current element and return it as a string The set of attributes for the current element is searched for a match to the given attribute id. This attribute is then returned as a string. If there is no attribute matching the id, and exception is thrown. Parse via getNextAttributeId is reset.- Parameters:
attribId
- is the specific attribute id to match- Returns:
- the string associated with the attribute
- Throws:
DecoderException
- if the expected value is not present
-
readSpace
Parse the current attribute as an address space The last attribute, as returned by getNextAttributeId, is returned as an address space.- Returns:
- the address space associated with the current attribute.
- Throws:
DecoderException
- if the expected value is not present
-
readSpace
Find the specific attribute in the current element and return it as an address space Search attributes from the current element for a match to the given attribute id. Return this attribute as an address space. If there is no attribute matching the id, an exception is thrown. Parse via getNextAttributeId is reset.- Parameters:
attribId
- is the specific attribute id to match- Returns:
- the address space associated with the attribute
- Throws:
DecoderException
- if the expected value is not present
-
skipElement
Skip parsing of the next element The element skipped is the one that would be opened by the next call to openElement.- Throws:
DecoderException
- if there is no new element
-