Package ghidra.app.util.opinion
Class PeLoader
- All Implemented Interfaces:
Loader,ExtensionPoint,Comparable<Loader>
Microsoft Portable Executable (PE) loader.
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
AbstractLibrarySupportLoader.LibrarySearchPath, AbstractLibrarySupportLoader.UnprocessedLibraryNested classes/interfaces inherited from interface ghidra.app.util.opinion.Loader
Loader.ImporterSettings -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe name of the PE headers memory block.static final StringPE loader option to control parsing CLI headersstatic final StringThe name of the PE loaderstatic final StringLoader option to display line numbersFields inherited from class ghidra.app.util.opinion.AbstractOrdinalSupportLoader
ORDINAL_LOOKUP_OPTION_NAMEFields inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
DEPTH_OPTION_NAME, LIBRARY_DEST_FOLDER_OPTION_NAME, LIBRARY_SEARCH_PATH_DUMMY_OPTION_NAME, LINK_EXISTING_OPTION_NAME, LINK_SEARCH_FOLDER_OPTION_NAME, LOAD_LIBRARY_OPTION_NAME, LOAD_ONLY_LIBRARIES_OPTION_NAME, MIRROR_LAYOUT_OPTION_NAMEFields inherited from class ghidra.app.util.opinion.AbstractProgramLoader
ANCHOR_LABELS_OPTION_NAME, APPLY_LABELS_OPTION_NAMEFields inherited from interface ghidra.app.util.opinion.Loader
COMMAND_LINE_ARG_PREFIX, loggingDisabled, OPTIONS_PROJECT_SAVE_STATE_KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddExternalReference(Data pointerData, ImportInfo importInfo, MessageLog log) protected FileBytescreateFileBytes(ByteProvider provider, Program program, TaskMonitor monitor) 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.getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram, boolean mirrorFsLayout) Gets the defaultLoaderoptions.protected Comparator<String> Returns aComparatorfor comparing library names.getName()protected PortableExecutable.SectionLayoutprotected intgetVirtualSize(PortableExecutable pe, SectionHeader[] sections, AddressSpace space) protected booleanhasComment(CommentType type, Address address) protected voidload(Program program, Loader.ImporterSettings settings) Loads bytes in a particular format into the givenProgram.protected voidprocessComments(Listing listing, TaskMonitor monitor) protected voidprocessDebug(DebugDirectoryParser parser, NTHeader ntHeader, Map<SectionHeader, Address> sectionToAddress, Program program, List<Option> options, TaskMonitor monitor) protected booleanprocessDebugCoffSymbol(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 voidsetComment(CommentType type, Address address, String comment) validateOptions(ByteProvider provider, LoadSpec loadSpec, 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.AbstractOrdinalSupportLoader
postLoadCleanup, postLoadProgramFixups, processLibrary, shouldSearchAllPathsMethods inherited from class ghidra.app.util.opinion.AbstractLibrarySupportLoader
createLibraryByteProvider, findLibraryInLoadedList, findLibraryInProject, getCustomLibrarySearchPaths, getLibraryDestinationFolderPath, getLibraryDestinationSearchFolder, getLibraryLoadDepth, getLibrarySearchFolders, getLibrarySearchPaths, getLinkSearchFolder, getTier, getTierPriority, isLinkExistingLibraries, isLoadLibraries, isMirroredLayout, isValidSearchPath, loadProgram, loadProgramInto, lookupLibraryInFolder, lookupLibraryInFs, matchSupportedLoadSpec, shouldLoadOnlyLibrariesMethods inherited from class ghidra.app.util.opinion.AbstractProgramLoader
addExternalBlock, createDefaultMemoryBlocks, createProgram, createProgram, generateBlockName, getLanguageService, load, loadInto, markAsFunction, setProgramProperties, shouldApplyProcessorLabelsByDefaultMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ghidra.app.util.opinion.Loader
compareTo, getPreferredFileName, loadsIntoNewFolder, supportsLoadIntoProgram, supportsLoadIntoProgram
-
Field Details
-
PE_NAME
The name of the PE loader- See Also:
-
HEADERS
The name of the PE headers memory block.- See Also:
-
PARSE_CLI_HEADERS_OPTION_NAME
PE loader option to control parsing CLI headers- See Also:
-
SHOW_LINE_NUMBERS_OPTION_NAME
Loader option to display line numbers- See Also:
-
-
Constructor Details
-
PeLoader
public PeLoader()
-
-
Method Details
-
findSupportedLoadSpecs
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:
IOException- if there was an IO-related issue finding theLoadSpecs.
-
load
protected void load(Program program, Loader.ImporterSettings settings) throws IOException, CancelledException Description copied from class:AbstractLibrarySupportLoaderLoads bytes in a particular format into the givenProgram.- Specified by:
loadin classAbstractLibrarySupportLoader- Parameters:
program- TheProgramto load into.settings- TheLoader.ImporterSettings- Throws:
IOException- if there was an IO-related problem loading.CancelledException- if the user cancelled the load.
-
getSectionLayout
-
createFileBytes
protected FileBytes createFileBytes(ByteProvider provider, Program program, TaskMonitor monitor) throws IOException, CancelledException - Throws:
IOExceptionCancelledException
-
getDefaultOptions
public List<Option> getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram, boolean mirrorFsLayout) Description copied from interface:LoaderGets the defaultLoaderoptions.- Specified by:
getDefaultOptionsin interfaceLoader- 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.mirrorFsLayout- True if the filesystem layout should be mirrored when loading; 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: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- 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.
-
getLibraryNameComparator
Description copied from class:AbstractLibrarySupportLoaderReturns aComparatorfor comparing library names.No assumptions should be made about whether the library name includes path information or not.
- Overrides:
getLibraryNameComparatorin classAbstractLibrarySupportLoader- Returns:
- a
Comparatorfor comparing library names
-
addExternalReference
-
processMemoryBlocks
protected Map<SectionHeader,Address> processMemoryBlocks(PortableExecutable pe, Program prog, FileBytes fileBytes, TaskMonitor monitor, MessageLog log) throws AddressOverflowException - Throws:
AddressOverflowException
-
getVirtualSize
-
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
-
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
-
setComment
-