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 TypeMethodDescriptionvoidclear()Clear any state associated with the encoder The encoder should be ready to write a new document after this call.voidcloseElement(ElementId elemId) End the current element in the encoding The current element must match the given annotation or an exception is thrown.booleanisEmpty()The encoder is considered empty if the writeTo() method would output zero bytesvoidopenElement(ElementId elemId) Begin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.booleanpatchIntegerAttribute(int pos, AttributeId attribId, long val) Replace an integer attribute for the element at the given position.intsize()The returned value can be used as a position for later modificationvoidwriteBool(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.voidwriteSignedInteger(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.voidwriteSpace(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.voidwriteSpaceId(AttributeId attribId, long spaceId) Write a given raw spaceid (as returned by AddressSpace.getSpaceID()) as an attribute.voidwriteString(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.voidwriteStringIndexed(AttributeId attribId, int index, String val) Write an annotated string, using an indexed attribute, into the encoding.voidwriteTo(OutputStream stream) Dump all the accumulated bytes in this encoder to the stream.voidwriteUnsignedInteger(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:EncoderClear any state associated with the encoder The encoder should be ready to write a new document after this call. -
openElement
Description copied from interface:EncoderBegin a new element in the encoding The element will have the given ElementId annotation and becomes the \e current element.- Specified by:
openElementin interfaceEncoder- Parameters:
elemId- is the given ElementId annotation- Throws:
IOException- for errors in the underlying stream
-
closeElement
Description copied from interface:EncoderEnd the current element in the encoding The current element must match the given annotation or an exception is thrown.- Specified by:
closeElementin 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:EncoderWrite an annotated boolean value into the encoding The boolean data is associated with the given AttributeId annotation and the current open element.- Specified by:
writeBoolin 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:EncoderWrite an annotated signed integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Specified by:
writeSignedIntegerin 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:EncoderWrite an annotated unsigned integer value into the encoding The integer is associated with the given AttributeId annotation and the current open element.- Specified by:
writeUnsignedIntegerin 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:EncoderWrite an annotated string into the encoding The string is associated with the given AttributeId annotation and the current open element.- Specified by:
writeStringin interfaceEncoder- Parameters:
attribId- is the given AttributeId annotationval- is the string to encode- Throws:
IOException- for errors in the underlying stream
-
writeStringIndexed
Description copied from interface:EncoderWrite 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.- Specified by:
writeStringIndexedin interfaceEncoder- 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
Description copied from interface:EncoderWrite an address space reference into the encoding The address space is associated with the given AttributeId annotation and the current open element.- Specified by:
writeSpacein 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:EncoderDump all the accumulated bytes in this encoder to the stream.- Specified by:
writeToin interfaceEncoder- Parameters:
stream- is the output stream- Throws:
IOException- for errors during the write operation
-
isEmpty
public boolean isEmpty()Description copied from interface:EncoderThe encoder is considered empty if the writeTo() method would output zero bytes -
size
public int size()Description copied from interface:PatchEncoderThe returned value can be used as a position for later modification- Specified by:
sizein interfacePatchEncoder- Returns:
- the number of bytes written to this stream so far
-
writeSpaceId
Description copied from interface:PatchEncoderWrite 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:
writeSpaceIdin interfacePatchEncoder- Parameters:
attribId- is the attributespaceId- is the given spaceid
-
patchIntegerAttribute
Description copied from interface:PatchEncoderReplace 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:
patchIntegerAttributein 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
-