Package ghidra.program.model.pcode
Class PackedEncode
java.lang.Object
ghidra.program.model.pcode.PackedEncode
- All Implemented Interfaces:
Encoder
,PatchEncoder
- Direct Known Subclasses:
PackedEncodeOverlay
A byte-based encoder designed to marshal to the decompiler efficiently
See
PackedDecode
for details of the encoding format-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Clear any state associated with the encoder The encoder should be ready to write a new document after this call.void
closeElement
(ElementId elemId) End the current element in the encoding The current element must match the given annotation or an exception is thrown.boolean
isEmpty()
The encoder is considered empty if the writeTo() method would output zero bytesvoid
openElement
(ElementId elemId) Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.boolean
patchIntegerAttribute
(int pos, AttributeId attribId, long val) Replace an integer attribute for the element at the given position.int
size()
The returned value can be used as a position for later modificationvoid
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
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, 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
writeSpaceId
(AttributeId attribId, long spaceId) Write a given raw spaceid (as returned by AddressSpace.getSpaceID()) as an attribute.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
writeTo
(OutputStream stream) Dump all the accumulated bytes in this encoder to the stream.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.
-
Constructor Details
-
PackedEncode
public PackedEncode()
-
-
Method Details
-
clear
public void clear()Description copied from interface:Encoder
Clear any state associated with the encoder The encoder should be ready to write a new document after this call. -
openElement
Description copied from interface:Encoder
Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.- Specified by:
openElement
in interfaceEncoder
- Parameters:
elemId
- is the given ElementId annotation- Throws:
IOException
- for errors in the underlying stream
-
closeElement
Description copied from interface:Encoder
End the current element in the encoding The current element must match the given annotation or an exception is thrown.- Specified by:
closeElement
in interfaceEncoder
- Parameters:
elemId
- is the given (expected) annotation for the current element- Throws:
IOException
- for errors in the underlying stream
-
writeBool
Description copied from interface:Encoder
Write an annotated boolean value into the encoding The boolean data is associated with the given AttributeId annotation and the current open element.- Specified by:
writeBool
in interfaceEncoder
- Parameters:
attribId
- is the given AttributeId annotationval
- is boolean value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSignedInteger
Description copied from interface:Encoder
Write an annotated signed integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Specified by:
writeSignedInteger
in interfaceEncoder
- Parameters:
attribId
- is the given AttributeId annotationval
- is the signed integer value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeUnsignedInteger
Description copied from interface:Encoder
Write an annotated unsigned integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Specified by:
writeUnsignedInteger
in interfaceEncoder
- Parameters:
attribId
- is the given AttributeId annotationval
- is the unsigned integer value to encode- Throws:
IOException
- for errors in the underlying stream
-
writeString
Description copied from interface:Encoder
Write an annotated string into the encoding The string is associated with the given AttributeId annotation and the current open element.- Specified by:
writeString
in interfaceEncoder
- Parameters:
attribId
- is the given AttributeId annotationval
- is the string to encode- Throws:
IOException
- for errors in the underlying stream
-
writeSpace
Description copied from interface:Encoder
Write an address space reference into the encoding The address space is associated with the given AttributeId annotation and the current open element.- Specified by:
writeSpace
in interfaceEncoder
- Parameters:
attribId
- is the given AttributeId annotationspc
- is the address space to encode- Throws:
IOException
- for errors in the underlying stream
-
writeTo
Description copied from interface:Encoder
Dump all the accumulated bytes in this encoder to the stream.- Specified by:
writeTo
in interfaceEncoder
- Parameters:
stream
- is the output stream- Throws:
IOException
- for errors during the write operation
-
isEmpty
public boolean isEmpty()Description copied from interface:Encoder
The encoder is considered empty if the writeTo() method would output zero bytes -
size
public int size()Description copied from interface:PatchEncoder
The returned value can be used as a position for later modification- Specified by:
size
in interfacePatchEncoder
- Returns:
- the number of bytes written to this stream so far
-
writeSpaceId
Description copied from interface:PatchEncoder
Write a given raw spaceid (as returned by AddressSpace.getSpaceID()) as an attribute. The effect is the same as if writeSpace() was called with the AddressSpace matching the spaceid, i.e. the decoder will read this as just space attribute.- Specified by:
writeSpaceId
in interfacePatchEncoder
- Parameters:
attribId
- is the attributespaceId
- is the given spaceid
-
patchIntegerAttribute
Description copied from interface:PatchEncoder
Replace an integer attribute for the element at the given position. The position is assumed to be at an open directive for the element containing the attribute to be patched.- Specified by:
patchIntegerAttribute
in interfacePatchEncoder
- Parameters:
pos
- is the given positionattribId
- is the attribute to be patchedval
- is the new value to insert- Returns:
- true if the attribute is successfully patched
-