Package ghidra.app.util.opinion
Class PeLoader
- java.lang.Object
-
- ghidra.app.util.opinion.AbstractProgramLoader
-
- ghidra.app.util.opinion.AbstractLibrarySupportLoader
-
- ghidra.app.util.opinion.PeLoader
-
- All Implemented Interfaces:
Loader,ExtensionPoint,java.lang.Comparable<Loader>
public class PeLoader extends AbstractLibrarySupportLoader
Microsoft Portable Executable (PE) loader.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPeLoader.CompilerOpinion-
Nested classes/interfaces inherited from interface ghidra.util.classfinder.ExtensionPoint
ExtensionPoint.Exclude, ExtensionPoint.Util
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringHEADERSThe name of the PE headers memory block.static java.lang.StringPARSE_CLI_HEADERS_OPTION_NAMEPE loader option to control parsing CLI headersstatic java.lang.StringPE_NAMEThe name of the PE loader-
Fields inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
LIB_OPTION_NAME, SYM_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
-
-
Constructor Summary
Constructors Constructor Description PeLoader()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.Collection<LoadSpec>findSupportedLoadSpecs(ByteProvider provider)If thisLoadersupports loading the givenByteProvider, this methods returns aCollectionof all supportedLoadSpecs that contain discovered load specification information that thisLoaderwill need to load.java.util.List<Option>getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram)Gets the defaultLoaderoptions.java.lang.StringgetName()protected booleanhasComment(int type, Address address)protected booleanisCaseInsensitiveLibraryFilenames()Specifies if the library filenames specified by this loader should be exact case match or case-insensitive.protected voidload(ByteProvider provider, LoadSpec loadSpec, java.util.List<Option> options, Program program, TaskMonitor monitor, MessageLog log)Loads bytes in a particular format into the givenProgram.protected voidprocessComments(Listing listing, TaskMonitor monitor)protected voidprocessDebug(DebugDirectoryParser parser, FileHeader fileHeader, java.util.Map<SectionHeader,Address> sectionToAddress, Program program, TaskMonitor monitor)protected booleanprocessDebugCoffSymbol(DebugCOFFSymbol symbol, FileHeader fileHeader, java.util.Map<SectionHeader,Address> sectionToAddress, Program program, TaskMonitor monitor)protected voidsetComment(int type, Address address, java.lang.String comment)java.lang.StringvalidateOptions(ByteProvider provider, LoadSpec loadSpec, java.util.List<Option> options, Program program)Validates theLoader'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.AbstractLibrarySupportLoader
createExportsFile, findAlreadyImportedLibrary, getLoadSpec, getTier, getTierPriority, importLibrary, importLibrary, loadProgram, loadProgramInto, postLoadProgramFixups
-
Methods inherited from class ghidra.app.util.opinion.AbstractProgramLoader
createDefaultMemoryBlocks, createProgram, generateBlockName, getLanguageService, load, loadInto, release, 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, supportsLoadIntoProgram
-
-
-
-
Field Detail
-
PE_NAME
public static final java.lang.String PE_NAME
The name of the PE loader- See Also:
- Constant Field Values
-
HEADERS
public static final java.lang.String HEADERS
The name of the PE headers memory block.- See Also:
- Constant Field Values
-
PARSE_CLI_HEADERS_OPTION_NAME
public static final java.lang.String PARSE_CLI_HEADERS_OPTION_NAME
PE loader option to control parsing CLI headers- See Also:
- Constant Field Values
-
-
Method Detail
-
findSupportedLoadSpecs
public java.util.Collection<LoadSpec> findSupportedLoadSpecs(ByteProvider provider) throws java.io.IOException
Description copied from interface:LoaderIf thisLoadersupports loading the givenByteProvider, this methods returns aCollectionof all supportedLoadSpecs that contain discovered load specification information that thisLoaderwill need to load. If thisLoadercannot support loading the givenByteProvider, an emptyCollectionis returned.- Parameters:
provider- The bytes being loaded.- Returns:
- A
CollectionofLoadSpecs that thisLoadersupports loading, or an emptyCollectionif thisLoaderdoesn't support loading the givenByteProvider. - Throws:
java.io.IOException- if there was an IO-related issue finding theLoadSpecs.
-
load
protected void load(ByteProvider provider, LoadSpec loadSpec, java.util.List<Option> options, Program program, TaskMonitor monitor, MessageLog log) throws java.io.IOException, CancelledException
Description copied from class:AbstractLibrarySupportLoaderLoads bytes in a particular format into the givenProgram.- Specified by:
loadin classAbstractLibrarySupportLoader- Parameters:
provider- The bytes to load.loadSpec- TheLoadSpecto use during load.options- The load options.program- TheProgramto load into.monitor- A cancelable task monitor.log- The message log.- Throws:
java.io.IOException- if there was an IO-related problem loading.CancelledException- if the user cancelled the load.
-
getDefaultOptions
public java.util.List<Option> getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram)
Description copied from interface:LoaderGets the defaultLoaderoptions.- Specified by:
getDefaultOptionsin interfaceLoader- Overrides:
getDefaultOptionsin classAbstractLibrarySupportLoader- Parameters:
provider- The bytes of the thing being loaded.loadSpec- TheLoadSpec.domainObject- TheDomainObjectbeing loaded.loadIntoProgram- True if the load is adding to an existingDomainObject; otherwise, false.- Returns:
- A list of the
Loader's default options.
-
validateOptions
public java.lang.String validateOptions(ByteProvider provider, LoadSpec loadSpec, java.util.List<Option> options, Program program)
Description copied from interface:LoaderValidates theLoader's options and returns null if all options are valid; otherwise, an error message describing the problem is returned.- Specified by:
validateOptionsin interfaceLoader- Overrides:
validateOptionsin classAbstractLibrarySupportLoader- Parameters:
provider- The bytes of the thing being loaded.loadSpec- The proposedLoadSpec.options- The list ofOptions 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
Options are valid; otherwise, an error message describing the problem is returned.
-
isCaseInsensitiveLibraryFilenames
protected boolean isCaseInsensitiveLibraryFilenames()
Description copied from class:AbstractLibrarySupportLoaderSpecifies 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:
isCaseInsensitiveLibraryFilenamesin classAbstractLibrarySupportLoader- Returns:
- - true if case-insensitive or false if case-sensitive.
-
getName
public java.lang.String getName()
Description copied from interface:LoaderGets theLoader's name, which is used both for display purposes, and to identify theLoaderin the opinion files.- Returns:
- The
Loader's name.
-
processComments
protected void processComments(Listing listing, TaskMonitor monitor)
-
processDebug
protected void processDebug(DebugDirectoryParser parser, FileHeader fileHeader, java.util.Map<SectionHeader,Address> sectionToAddress, Program program, TaskMonitor monitor)
-
processDebugCoffSymbol
protected boolean processDebugCoffSymbol(DebugCOFFSymbol symbol, FileHeader fileHeader, java.util.Map<SectionHeader,Address> sectionToAddress, Program program, TaskMonitor monitor)
-
hasComment
protected boolean hasComment(int type, Address address)
-
setComment
protected void setComment(int type, Address address, java.lang.String comment)
-
-