Class DataDirectory

java.lang.Object
ghidra.app.util.bin.format.pe.DataDirectory
All Implemented Interfaces:
PeMarkupable, StructConverter
Direct Known Subclasses:
ArchitectureDataDirectory, BaseRelocationDataDirectory, BoundImportDataDirectory, CliMetadataDirectory, COMDescriptorDataDirectory, DebugDataDirectory, DefaultDataDirectory, DelayImportDataDirectory, ExceptionDataDirectory, ExportDataDirectory, GlobalPointerDataDirectory, ImportAddressTableDataDirectory, ImportDataDirectory, LoadConfigDataDirectory, ResourceDataDirectory, SecurityDataDirectory, TLSDataDirectory

public abstract class DataDirectory extends Object implements StructConverter, PeMarkupable
An abstract base class to represent the IMAGE_DATA_DIRECTORY data structure defined in winnt.h.
 typedef struct _IMAGE_DATA_DIRECTORY {
     DWORD   VirtualAddress;
     DWORD   Size;
 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; {
 
  • Field Details

    • TITLE

      protected static final String TITLE
      The name to use when converting into a structure data type.
      See Also:
    • IMAGE_SIZEOF_IMAGE_DIRECTORY_ENTRY

      public static final byte IMAGE_SIZEOF_IMAGE_DIRECTORY_ENTRY
      The size of the data directory, in bytes.
      See Also:
    • ntHeader

      protected NTHeader ntHeader
    • reader

      protected BinaryReader reader
    • virtualAddress

      protected int virtualAddress
    • size

      protected int size
    • hasParsed

      protected boolean hasParsed
  • Constructor Details

    • DataDirectory

      public DataDirectory()
  • Method Details

    • processDataDirectory

      protected void processDataDirectory(NTHeader ntHeader, BinaryReader reader) throws IOException
      Throws:
      IOException
    • getDirectoryName

      public abstract String getDirectoryName()
    • parse

      public abstract boolean parse() throws IOException
      Parses this data directory.
      Returns:
      True if parsing completed successfully; otherwise, false.
      Throws:
      IOException - If there was an IO problem while parsing.
    • va

      protected long va(long va, boolean isBinary)
    • createTerminatedString

      protected void createTerminatedString(Program program, Address addr, boolean label, MessageLog log)
    • createDirectoryBookmark

      protected void createDirectoryBookmark(Program program, Address addr)
    • setBookmark

      protected void setBookmark(Program prog, Address addr, String comment)
    • setPlateComment

      protected void setPlateComment(Program prog, Address addr, String comment)
    • setEolComment

      protected void setEolComment(Program prog, Address addr, String comment)
    • setPreComment

      protected void setPreComment(Program prog, Address addr, String comment)
    • createFragment

      protected boolean createFragment(Program program, String fragmentName, Address start, Address end)
      Creates a fragment with the given name (if it does not already exist). Move the address range into the fragment. Note: the end address is not inclusive!
    • getVirtualAddress

      public int getVirtualAddress()
      Returns the relative virtual address of this data directory.
      Returns:
      the relative virtual address of this data directory
    • setVirtualAddress

      public void setVirtualAddress(int addr)
      Sets the relative virtual address of this data directory.
      Parameters:
      addr - the new relative virtual address
    • getSize

      public int getSize()
      Returns the size of this data directory.
      Returns:
      the size of this data directory
    • setSize

      public void setSize(int size)
      Sets the size of this data directory.
      Parameters:
      size - the new size of this data directory
    • toString

      public String toString()
      Overrides:
      toString in class Object
      See Also:
    • toDataType

      public abstract DataType toDataType() throws DuplicateNameException, IOException
      This method should return a datatype representing the data stored in this directory.
      Specified by:
      toDataType in interface StructConverter
      Returns:
      returns a structure datatype representing the implementor of this interface
      Throws:
      DuplicateNameException - when a datatype of the same name already exists
      IOException
      See Also:
    • writeBytes

      public void writeBytes(RandomAccessFile raf, DataConverter dc, PortableExecutable template) throws IOException
      Directories that are not contained inside of sections should override this method to write their bytes into the specified file.
      Parameters:
      raf - the random access file used for output
      dc - the data converter for endianness
      template - the original unadulterated PE
      Throws:
      IOException - if an I/O error occurs
    • hasParsedCorrectly

      public boolean hasParsedCorrectly()
    • getPointer

      public int getPointer()