Package ghidra.program.model.pcode
Interface Encoder
- All Known Subinterfaces:
CachedEncoder
,PatchEncoder
- All Known Implementing Classes:
PackedEncode
,PackedEncodeOverlay
,PatchPackedEncode
,XmlEncode
public interface Encoder
An interface for writing structured data to a stream
The resulting encoded data is structured similarly to an XML document. The 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 written
using a sequence of openElement() and closeElement() calls, intermixed with write*() calls to encode
the data primitives. All primitives written using a write*() call are associated with current open element,
and all write*() calls for one element must come before opening any child element.
The traditional XML element text content can be written using the special ATTRIB_CONTENT AttributeId, which
must be the last write*() call associated with the specific element.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
closeElement
(ElementId elemId) End the current element in the encoding The current element must match the given annotation or an exception is thrown.void
openElement
(ElementId elemId) Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.void
writeBool
(AttributeId attribId, boolean val) Write an annotated boolean value into the encoding The boolean data is associated with the given AttributeId annotation and the current open element.void
writeOpcode
(AttributeId attribId, int opcode) Write a p-code operation opcode into the encoding, associating it with the given annotation.void
writeSignedInteger
(AttributeId attribId, long val) Write an annotated signed integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.void
writeSpace
(AttributeId attribId, int index, String name) Write an address space reference into the encoding.void
writeSpace
(AttributeId attribId, AddressSpace spc) Write an address space reference into the encoding The address space is associated with the given AttributeId annotation and the current open element.void
writeString
(AttributeId attribId, String val) Write an annotated string into the encoding The string is associated with the given AttributeId annotation and the current open element.void
writeStringIndexed
(AttributeId attribId, int index, String val) Write an annotated string, using an indexed attribute, into the encoding.void
writeUnsignedInteger
(AttributeId attribId, long val) Write an annotated unsigned integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.
-
Method Details
-
openElement
Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.- Parameters:
elemId
- is the given ElementId annotation- Throws:
IOException
- for errors in the underlying stream
-
closeElement
End the current element in the encoding The current element must match the given annotation or an exception is thrown.- Parameters:
elemId
- is the given (expected) annotation for the current element- Throws:
IOException
- for errors in the underlying stream
-
writeBool
Write an annotated boolean value into the encoding The boolean data is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is boolean value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSignedInteger
Write an annotated signed integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is the signed integer value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeUnsignedInteger
Write an annotated unsigned integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is the unsigned integer value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeString
Write an annotated string into the encoding The string is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationval
- is the string to encode- Throws:
IOException
- for errors in the underlying stream
-
writeStringIndexed
Write an annotated string, using an indexed attribute, into the encoding. Multiple attributes with a shared name can be written to the same element by calling this method multiple times with a different index value. The encoding will use attribute ids up to the base id plus the maximum index passed in. Implementors must be careful to not use other attributes with ids bigger than the base id within the element taking the indexed attribute.- Parameters:
attribId
- is the shared AttributeIdindex
- is the unique index to associated with the stringval
- is the string to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSpace
Write an address space reference into the encoding The address space is associated with the given AttributeId annotation and the current open element.- Parameters:
attribId
- is the given AttributeId annotationspc
- is the address space to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSpace
Write an address space reference into the encoding. An address space identified by its name and unique index is associated with the given annotation and the current open element.- Parameters:
attribId
- is the given annotationindex
- is the unique index of the address spacename
- is the name of the address space- Throws:
IOException
- for errors in the underlying stream
-
writeOpcode
Write a p-code operation opcode into the encoding, associating it with the given annotation. The opcode is specified based on the constants defined inPcodeOp
.- Parameters:
attribId
- is the given annotationopcode
- is the opcode constant- Throws:
IOException
- for errors in the underlying stream
-