Package ghidra.app.util.opinion

# Class PeLoader

java.lang.Object
ghidra.app.util.opinion.AbstractProgramLoader
ghidra.app.util.opinion.AbstractLibrarySupportLoader
ghidra.app.util.opinion.AbstractOrdinalSupportLoader
ghidra.app.util.opinion.PeLoader

All Implemented Interfaces:
  `Loader`, `ExtensionPoint`, `Comparable<Loader>`

public class PeLoader extends AbstractOrdinalSupportLoader
Microsoft Portable Executable (PE) loader.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `PeLoader.CompilerOpinion`

  ## Nested classes/interfaces inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader

  `AbstractLibrarySupportLoader.FileSystemSearchPath`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `HEADERS`
  The name of the PE headers memory block.
  `static final String`
  `PARSE_CLI_HEADERS_OPTION_NAME`
  PE loader option to control parsing CLI headers
  `static final String`
  `PE_NAME`
  The name of the PE loader
  `static final String`
  `SHOW_LINE_NUMBERS_OPTION_NAME`
  Loader option to display line numbers

  ### Fields inherited from class ghidra.app.util.opinion.AbstractOrdinalSupportLoader

  `ORDINAL_LOOKUP_OPTION_NAME`

  ### Fields inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader

  `DEPTH_OPTION_NAME, LIBRARY_DEST_FOLDER_OPTION_NAME, LINK_EXISTING_OPTION_NAME, LINK_SEARCH_FOLDER_OPTION_NAME, LOCAL_LIBRARY_OPTION_NAME, SYSTEM_LIBRARY_OPTION_NAME`

  ### Fields inherited from class ghidra.app.util.opinion.AbstractProgramLoader

  `ANCHOR_LABELS_OPTION_NAME, APPLY_LABELS_OPTION_NAME`

  ### Fields inherited from interface ghidra.app.util.opinion.Loader

  `COMMAND_LINE_ARG_PREFIX, OPTIONS_PROJECT_SAVE_STATE_KEY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PeLoader()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `addExternalReference(Data pointerData, ImportInfo importInfo, MessageLog log)`
  `protected FileBytes`
  `createFileBytes(ByteProvider provider, Program program, TaskMonitor monitor)`
  `Collection<LoadSpec>`
  `findSupportedLoadSpecs(ByteProvider provider)`
  If this `Loader` supports loading the given `ByteProvider`, this methods returns a `Collection` of all supported `LoadSpec`s that contain discovered load specification information that this `Loader` will need to load.
  `List<Option>`
  `getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram)`
  Gets the default `Loader` options.
  `String`
  `getName()`
  Gets the `Loader`'s name, which is used both for display purposes, and to identify the `Loader` in the opinion files.
  `protected PortableExecutable.SectionLayout`
  `getSectionLayout()`
  `protected int`
  `getVirtualSize(PortableExecutable pe, SectionHeader[] sections, AddressSpace space)`
  `protected boolean`
  `hasComment(int type, Address address)`
  `protected boolean`
  `isCaseInsensitiveLibraryFilenames()`
  Specifies if the library filenames specified by this loader should be exact case match or case-insensitive.
  `protected void`
  `load(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log)`
  Loads bytes in a particular format into the given `Program`.
  `protected void`
  `processComments(Listing listing, TaskMonitor monitor)`
  `protected void`
  `processDebug(DebugDirectoryParser parser, NTHeader ntHeader, Map<SectionHeader,Address> sectionToAddress, Program program, List<Option> options, TaskMonitor monitor)`
  `protected boolean`
  `processDebugCoffSymbol(DebugCOFFSymbol symbol, NTHeader ntHeader, Map<SectionHeader,Address> sectionToAddress, Program program, TaskMonitor monitor)`
  `protected Map<SectionHeader,Address>`
  `processMemoryBlocks(PortableExecutable pe, Program prog, FileBytes fileBytes, TaskMonitor monitor, MessageLog log)`
  `protected void`
  `setComment(int type, Address address, String comment)`
  `String`
  `validateOptions(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program)`
  Validates the `Loader`'s options and returns null if all options are valid; otherwise, an error message describing the problem is returned.

  ### Methods inherited from class ghidra.app.util.opinion.AbstractOrdinalSupportLoader

  `postLoadCleanup, postLoadProgramFixups, processLibrary, shouldLoadLibrary, shouldSearchAllPaths`

  ### Methods inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader

  `createLibraryByteProvider, getCustomLibrarySearchPaths, getLibraryDestinationFolderPath, getLibraryDestinationSearchFolder, getLibraryLoadDepth, getLinkSearchFolder, getTier, getTierPriority, isLinkExistingLibraries, isLoadLocalLibraries, isLoadSystemLibraries, isOptionalLibraryFilenameExtensions, loadProgram, loadProgramInto, matchSupportedLoadSpec, resolveLibraryFile`

  ### Methods inherited from class ghidra.app.util.opinion.AbstractProgramLoader

  `concatenatePaths, createDefaultMemoryBlocks, createProgram, generateBlockName, getLanguageService, load, loadInto, markAsFunction, release, setProgramProperties, shouldApplyProcessorLabelsByDefault`

  ### 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.opinion.Loader

  `compareTo, getPreferredFileName, loadsIntoNewFolder, supportsLoadIntoProgram, supportsLoadIntoProgram`

- ## Field Details

  - ### PE_NAME

    public static final String PE_NAME
    The name of the PE loader
    See Also:
      - Constant Field Values

  - ### HEADERS

    public static final String HEADERS
    The name of the PE headers memory block.
    See Also:
      - Constant Field Values

  - ### PARSE_CLI_HEADERS_OPTION_NAME

    public static final String PARSE_CLI_HEADERS_OPTION_NAME
    PE loader option to control parsing CLI headers
    See Also:
      - Constant Field Values

  - ### SHOW_LINE_NUMBERS_OPTION_NAME

    public static final String SHOW_LINE_NUMBERS_OPTION_NAME
    Loader option to display line numbers
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### PeLoader

    public PeLoader()

- ## Method Details

  - ### findSupportedLoadSpecs

    public Collection<LoadSpec> findSupportedLoadSpecs(ByteProvider provider) throws IOException
    Description copied from interface: `Loader`
    If this `Loader` supports loading the given `ByteProvider`, this methods returns a `Collection` of all supported `LoadSpec`s that contain discovered load specification information that this `Loader` will need to load. If this `Loader` cannot support loading the given `ByteProvider`, an empty `Collection` is returned.
    Parameters:
      `provider` - The bytes being loaded.
    Returns:
      A `Collection` of `LoadSpec`s that this `Loader` supports loading, or an empty `Collection` if this `Loader` doesn't support loading the given `ByteProvider`.
    Throws:
      `IOException` - if there was an IO-related issue finding the `LoadSpec`s.

  - ### load

    protected void load(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program, TaskMonitor monitor, MessageLog log) throws IOException, CancelledException
    Description copied from class: `AbstractLibrarySupportLoader`
    Loads bytes in a particular format into the given `Program`.
    Specified by:
      `load` in class `AbstractLibrarySupportLoader`
    Parameters:
      `provider` - The bytes to load.
      `loadSpec` - The `LoadSpec` to use during load.
      `options` - The load options.
      `program` - The `Program` to load into.
      `monitor` - A cancelable task monitor.
      `log` - The message log.
    Throws:
      `IOException` - if there was an IO-related problem loading.
      `CancelledException` - if the user cancelled the load.

  - ### getSectionLayout

    protected PortableExecutable.SectionLayout getSectionLayout()

  - ### createFileBytes

    protected FileBytes createFileBytes(ByteProvider provider, Program program, TaskMonitor monitor) throws IOException, CancelledException
    Throws:
      `IOException`
      `CancelledException`

  - ### getDefaultOptions

    public List<Option> getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram)
    Description copied from interface: `Loader`
    Gets the default `Loader` options.
    Specified by:
      `getDefaultOptions` in interface `Loader`
    Parameters:
      `provider` - The bytes of the thing being loaded.
      `loadSpec` - The `LoadSpec`.
      `domainObject` - The `DomainObject` being loaded.
      `loadIntoProgram` - True if the load is adding to an existing `DomainObject`; otherwise, false.
    Returns:
      A list of the `Loader`'s default options.

  - ### validateOptions

    public String validateOptions(ByteProvider provider, LoadSpec loadSpec, List<Option> options, Program program)
    Description copied from interface: `Loader`
    Validates the `Loader`'s options and returns null if all options are valid; otherwise, an error message describing the problem is returned.
    Specified by:
      `validateOptions` in interface `Loader`
    Parameters:
      `provider` - The bytes of the thing being loaded.
      `loadSpec` - The proposed `LoadSpec`.
      `options` - The list of `Option`s to validate.
      `program` - existing program if the loader is adding to an existing program. If it is a fresh import, then this will be null.
    Returns:
      null if all `Option`s are valid; otherwise, an error message describing the problem is returned.

  - ### isCaseInsensitiveLibraryFilenames

    protected boolean isCaseInsensitiveLibraryFilenames()
    Description copied from class: `AbstractLibrarySupportLoader`
    Specifies if the library filenames specified by this loader should be exact case match or case-insensitive.

    Derived loader classes should override this method and specify if the OS that normally handles this type of binary is case-insensitive.

    Overrides:
      `isCaseInsensitiveLibraryFilenames` in class `AbstractLibrarySupportLoader`
    Returns:
      True if case-insensitive or false if case-sensitive.

  - ### addExternalReference

    protected void addExternalReference(Data pointerData, ImportInfo importInfo, MessageLog log)

  - ### processMemoryBlocks

    protected Map<SectionHeader,Address> processMemoryBlocks(PortableExecutable pe, Program prog, FileBytes fileBytes, TaskMonitor monitor, MessageLog log) throws AddressOverflowException
    Throws:
      `AddressOverflowException`

  - ### getVirtualSize

    protected int getVirtualSize(PortableExecutable pe, SectionHeader[] sections, AddressSpace space)

  - ### getName

    public String getName()
    Description copied from interface: `Loader`
    Gets the `Loader`'s name, which is used both for display purposes, and to identify the `Loader` in the opinion files.
    Returns:
      The `Loader`'s name.

  - ### processComments

    protected void processComments(Listing listing, TaskMonitor monitor)

  - ### processDebug

    protected void processDebug(DebugDirectoryParser parser, NTHeader ntHeader, Map<SectionHeader,Address> sectionToAddress, Program program, List<Option> options, TaskMonitor monitor)

  - ### processDebugCoffSymbol

    protected boolean processDebugCoffSymbol(DebugCOFFSymbol symbol, NTHeader ntHeader, Map<SectionHeader,Address> sectionToAddress, Program program, TaskMonitor monitor)

  - ### hasComment

    protected boolean hasComment(int type, Address address)

  - ### setComment

    protected void setComment(int type, Address address, String comment)