Package ghidra.app.util.opinion
Class AbstractOrdinalSupportLoader
java.lang.Object
ghidra.app.util.opinion.AbstractProgramLoader
ghidra.app.util.opinion.AbstractLibrarySupportLoader
ghidra.app.util.opinion.AbstractOrdinalSupportLoader
- All Implemented Interfaces:
Loader,ExtensionPoint,Comparable<Loader>
An abstract
Loader that provides support for programs that link to external libraries
with an ordinal mechanism. Supports caching library lookup information to XML files.-
Nested Class Summary
Nested 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
FieldsFields 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 TypeMethodDescriptiongetDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram, boolean mirrorFsLayout) Gets the defaultLoaderoptions.protected voidpostLoadCleanup(boolean success) This gets called as the final step of the load process.protected voidpostLoadProgramFixups(List<Loaded<Program>> loadedPrograms, Loader.ImporterSettings settings) This gets called after the given list ofloaded programss is finished loading.protected voidprocessLibrary(Program lib, String libName, FSRL libFsrl, Queue<AbstractLibrarySupportLoader.UnprocessedLibrary> unprocessed, int depth, Loader.ImporterSettings settings) Performs optional follow-on actions after an the given library has been loadedprotected booleanshouldSearchAllPaths(Program program, Loader.ImporterSettings settings) Checks whether or not to search for libraries using all possible search paths, regardless of what options are setvalidateOptions(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.AbstractLibrarySupportLoader
createLibraryByteProvider, findLibraryInLoadedList, findLibraryInProject, getCustomLibrarySearchPaths, getLibraryDestinationFolderPath, getLibraryDestinationSearchFolder, getLibraryLoadDepth, getLibraryNameComparator, getLibrarySearchFolders, getLibrarySearchPaths, getLinkSearchFolder, getTier, getTierPriority, isLinkExistingLibraries, isLoadLibraries, isMirroredLayout, isValidSearchPath, load, 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, findSupportedLoadSpecs, getName, getPreferredFileName, loadsIntoNewFolder, supportsLoadIntoProgram, supportsLoadIntoProgram
-
Field Details
-
ORDINAL_LOOKUP_OPTION_NAME
- See Also:
-
-
Constructor Details
-
AbstractOrdinalSupportLoader
public AbstractOrdinalSupportLoader()
-
-
Method Details
-
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- 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.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- 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.
-
shouldSearchAllPaths
Description copied from class:AbstractLibrarySupportLoaderChecks whether or not to search for libraries using all possible search paths, regardless of what options are set- Overrides:
shouldSearchAllPathsin classAbstractLibrarySupportLoader- Parameters:
program- TheProgrambeing loadedsettings- TheLoader.ImporterSettings- Returns:
- True if all possible search paths should be used, regardless of what options are set
-
processLibrary
protected void processLibrary(Program lib, String libName, FSRL libFsrl, Queue<AbstractLibrarySupportLoader.UnprocessedLibrary> unprocessed, int depth, Loader.ImporterSettings settings) throws IOException, CancelledException Description copied from class:AbstractLibrarySupportLoaderPerforms optional follow-on actions after an the given library has been loaded- Overrides:
processLibraryin classAbstractLibrarySupportLoader- Parameters:
lib- The loaded libraryProgramlibName- The name of the librarylibFsrl- The libraryFSRLunprocessed- TheQueueofunprocessed librariesdepth- The load depth of the library to loadsettings- TheLoader.ImporterSettings- Throws:
IOException- If an IO-related error occurredCancelledException- If the user cancelled the action
-
postLoadProgramFixups
protected void postLoadProgramFixups(List<Loaded<Program>> loadedPrograms, Loader.ImporterSettings settings) throws CancelledException, IOException Description copied from class:AbstractLibrarySupportLoaderThis gets called after the given list ofloaded programss is finished loading. It provides subclasses an opportunity to do follow-on actions to the load.Fix up program's external library entries so that they point to a path in the project.
- Overrides:
postLoadProgramFixupsin classAbstractLibrarySupportLoader- Parameters:
loadedPrograms- Theloaded programsto be fixed up.settings- TheLoader.ImporterSettings.- Throws:
CancelledException- if the user cancelled the load.IOException- if there was an IO-related problem loading.
-
postLoadCleanup
protected void postLoadCleanup(boolean success) Description copied from class:AbstractProgramLoaderThis gets called as the final step of the load process. Subclasses may override it to ensure any resources they created can be cleaned up after the load finishes.NOTE: Subclasses should not use this method to release any
Programs they created when failure occurs. That should be done by the subclass as soon as it detects failure has occurred.- Overrides:
postLoadCleanupin classAbstractProgramLoader- Parameters:
success- True if the load completed successfully; otherwise, false
-