Package ghidra.app.util.opinion
Interface Loader
-
- All Superinterfaces:
java.lang.Comparable<Loader>
,ExtensionPoint
- All Known Implementing Classes:
AbstractLibrarySupportLoader
,AbstractProgramLoader
,BinaryLoader
,CoffLoader
,DbgLoader
,DefLoader
,DyldCacheLoader
,ElfLoader
,GdtLoader
,GzfLoader
,IntelHexLoader
,MachoLoader
,MapLoader
,MotorolaHexLoader
,MSCoffLoader
,MzLoader
,NeLoader
,OmfLoader
,PefLoader
,PeLoader
,XmlLoader
public interface Loader extends ExtensionPoint, java.lang.Comparable<Loader>
An interface that all loaders must implement. A particular loader implementation should be designed to identify one and only one file format.NOTE: ALL loader CLASSES MUST END IN "Loader". If not, the
ClassSearcher
will not find them.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
COMMAND_LINE_ARG_PREFIX
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default int
compareTo(Loader o)
java.util.Collection<LoadSpec>
findSupportedLoadSpecs(ByteProvider provider)
If thisLoader
supports loading the givenByteProvider
, this methods returns aCollection
of all supportedLoadSpec
s that contain discovered load specification information that thisLoader
will need to load.java.util.List<Option>
getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram)
Gets the defaultLoader
options.java.lang.String
getName()
default java.lang.String
getPreferredFileName(ByteProvider provider)
The preferred file name to use when loading.LoaderTier
getTier()
For ordering purposes; lower tier numbers are more important (and listed first).int
getTierPriority()
For ordering purposes; lower numbers are more important (and listed first, within its tier).java.util.List<DomainObject>
load(ByteProvider provider, java.lang.String name, DomainFolder folder, LoadSpec loadSpec, java.util.List<Option> options, MessageLog messageLog, java.lang.Object consumer, TaskMonitor monitor)
Loads bytes in a particular format as a newDomainObject
.boolean
loadInto(ByteProvider provider, LoadSpec loadSpec, java.util.List<Option> options, MessageLog messageLog, Program program, TaskMonitor monitor)
Loads bytes into the specifiedProgram
.default boolean
supportsLoadIntoProgram()
java.lang.String
validateOptions(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.
-
-
-
Field Detail
-
COMMAND_LINE_ARG_PREFIX
static final java.lang.String COMMAND_LINE_ARG_PREFIX
- See Also:
- Constant Field Values
-
-
Method Detail
-
findSupportedLoadSpecs
java.util.Collection<LoadSpec> findSupportedLoadSpecs(ByteProvider provider) throws java.io.IOException
If thisLoader
supports loading the givenByteProvider
, this methods returns aCollection
of all supportedLoadSpec
s that contain discovered load specification information that thisLoader
will need to load. If thisLoader
cannot support loading the givenByteProvider
, an emptyCollection
is returned.- Parameters:
provider
- The bytes being loaded.- Returns:
- A
Collection
ofLoadSpec
s that thisLoader
supports loading, or an emptyCollection
if thisLoader
doesn't support loading the givenByteProvider
. - Throws:
java.io.IOException
- if there was an IO-related issue finding theLoadSpec
s.
-
load
java.util.List<DomainObject> load(ByteProvider provider, java.lang.String name, DomainFolder folder, LoadSpec loadSpec, java.util.List<Option> options, MessageLog messageLog, java.lang.Object consumer, TaskMonitor monitor) throws java.io.IOException, CancelledException, DuplicateNameException, InvalidNameException, VersionException
Loads bytes in a particular format as a newDomainObject
. MultipleDomainObject
s may end up getting created, depending on the nature of the format.- Parameters:
provider
- The bytes to load.name
- The name of the thing that's being loaded.folder
- TheDomainFolder
where the loaded thing should be saved. Could be null if the thing should not be pre-saved.loadSpec
- TheLoadSpec
to use during load.options
- The load options.messageLog
- The message log.consumer
- A consumer object forDomainObject
generated.monitor
- A cancelable task monitor.- Returns:
- A list of loaded
DomainObject
s (element 0 corresponds to primary loaded object). - Throws:
java.io.IOException
- if there was an IO-related problem loading.CancelledException
- if the user cancelled the load.DuplicateNameException
- if the load resulted in a naming conflict with theDomainObject
.InvalidNameException
- if an invalidDomainObject
name was used during load.VersionException
- if there was an issue with database versions, probably due to a failed language upgrade.
-
loadInto
boolean loadInto(ByteProvider provider, LoadSpec loadSpec, java.util.List<Option> options, MessageLog messageLog, Program program, TaskMonitor monitor) throws java.io.IOException, CancelledException
Loads bytes into the specifiedProgram
. This method will not create any newProgram
s. It is only for adding to an existingProgram
.- Parameters:
provider
- The bytes to load into theProgram
.loadSpec
- TheLoadSpec
to use during load.options
- The load options.messageLog
- The message log.program
- TheProgram
to load into.monitor
- A cancelable task monitor.- Returns:
- True if the file was successfully loaded; otherwise, false.
- Throws:
java.io.IOException
- if there was an IO-related problem loading.CancelledException
- if the user cancelled the load.
-
getDefaultOptions
java.util.List<Option> getDefaultOptions(ByteProvider provider, LoadSpec loadSpec, DomainObject domainObject, boolean loadIntoProgram)
Gets the defaultLoader
options.- Parameters:
provider
- The bytes of the thing being loaded.loadSpec
- TheLoadSpec
.domainObject
- TheDomainObject
being loaded.loadIntoProgram
- True if the load is adding to an existingDomainObject
; otherwise, false.- Returns:
- A list of the
Loader
's default options.
-
validateOptions
java.lang.String validateOptions(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.- Parameters:
provider
- The bytes of the thing being loaded.loadSpec
- The proposedLoadSpec
.options
- The list ofOption
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.
-
getName
java.lang.String getName()
Gets theLoader
's name, which is used both for display purposes, and to identify theLoader
in the opinion files.- Returns:
- The
Loader
's name.
-
getTier
LoaderTier getTier()
For ordering purposes; lower tier numbers are more important (and listed first).- Returns:
- the tier of the loader
-
getTierPriority
int getTierPriority()
For ordering purposes; lower numbers are more important (and listed first, within its tier).- Returns:
- the ordering of the loader within its tier
-
getPreferredFileName
default java.lang.String getPreferredFileName(ByteProvider provider)
The preferred file name to use when loading.The default behavior of this method is to return the (cleaned up) name of the given
ByteProvider
.NOTE: This method may get called frequently, so only parse the given
ByteProvider
if absolutely necessary.- Parameters:
provider
- The bytes to load.- Returns:
- The preferred file name to use when loading.
-
supportsLoadIntoProgram
default boolean supportsLoadIntoProgram()
-
-