Class CliAbstractStream
- java.lang.Object
-
- ghidra.app.util.bin.format.pe.cli.streams.CliAbstractStream
-
- All Implemented Interfaces:
PeMarkupable
,StructConverter
- Direct Known Subclasses:
CliStreamBlob
,CliStreamGuid
,CliStreamMetadata
,CliStreamStrings
public abstract class CliAbstractStream extends java.lang.Object implements StructConverter, PeMarkupable
A abstract CLI stream type for convenience. Streams that we support should subclass this class and override theparse()
,markup(ghidra.program.model.listing.Program, boolean, ghidra.util.task.TaskMonitor, ghidra.app.util.importer.MessageLog, ghidra.app.util.bin.format.pe.NTHeader)
, andStructConverter.toDataType()
methods appropriately.When streams are laid down in memory they are referred to as heaps, but we'll just stick with calling them streams because using both terms can get confusing.
-
-
Field Summary
Fields Modifier and Type Field Description protected CliStreamHeader
header
protected long
offset
static java.lang.String
PATH
protected BinaryReader
reader
protected int
rva
-
Constructor Summary
Constructors Constructor Description CliAbstractStream(CliStreamHeader header, long offset, int rva, BinaryReader reader)
Creates a new generic CLI stream type.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description CliStreamHeader
getStreamHeader()
Gets this stream's header.static Address
getStreamMarkupAddress(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader, CliAbstractStream stream, int streamIndex)
Gets the markup address of an offset in a given stream.void
markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader)
Does basic markup that all streams will want: Set monitor message Validate addresses Add bookmark Add symbol Create data type Subclass should first call this and then provide any custom markup they need.abstract boolean
parse()
Parses this stream.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface ghidra.app.util.bin.StructConverter
toDataType
-
-
-
-
Field Detail
-
PATH
public static final java.lang.String PATH
- See Also:
- Constant Field Values
-
header
protected CliStreamHeader header
-
offset
protected long offset
-
rva
protected int rva
-
reader
protected BinaryReader reader
-
-
Constructor Detail
-
CliAbstractStream
public CliAbstractStream(CliStreamHeader header, long offset, int rva, BinaryReader reader) throws java.io.IOException
Creates a new generic CLI stream type. This is intended to be called by a subclass stream during its creation.- Parameters:
header
- The stream header associated with this stream.offset
- The reader offset where this stream starts.rva
- The relative virtual address where this stream starts.reader
- A reader that is used to read the stream.- Throws:
java.io.IOException
- if there is a problem reading the stream.
-
-
Method Detail
-
parse
public abstract boolean parse() throws java.io.IOException
Parses this stream.- Returns:
- True if parsing completed successfully; otherwise, false.
- Throws:
java.io.IOException
- If there was an IO problem while parsing.
-
markup
public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader) throws DuplicateNameException, java.io.IOException
Does basic markup that all streams will want:- Set monitor message
- Validate addresses
- Add bookmark
- Add symbol
- Create data type
- Specified by:
markup
in interfacePeMarkupable
- Parameters:
program
- The program to markup.isBinary
- True if the program is binary; otherwise, false.monitor
- The monitor.log
- The log.ntHeader
- The PE's NT Header structure.- Throws:
DuplicateNameException
java.io.IOException
-
getStreamHeader
public CliStreamHeader getStreamHeader()
Gets this stream's header.- Returns:
- This stream's header.
-
getStreamMarkupAddress
public static Address getStreamMarkupAddress(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log, NTHeader ntHeader, CliAbstractStream stream, int streamIndex)
Gets the markup address of an offset in a given stream.- Parameters:
program
-isBinary
-monitor
-log
-ntHeader
-stream
- The stream to offset into.streamIndex
- The index into the stream.- Returns:
- The markup address of the given offset in the provided stream.
-
-