Package ghidra.program.database

# Class ProgramDB

java.lang.Object
ghidra.framework.data.DomainObjectAdapter
ghidra.framework.data.DomainObjectAdapterDB
ghidra.program.database.ProgramDB

All Implemented Interfaces:
  `ErrorHandler`, `DataTypeManagerOwner`, `DomainObject`, `DataTypeManagerDomainObject`, `ProgramArchitecture`, `Program`, `ChangeManager`

public class ProgramDB extends DomainObjectAdapterDB implements Program, ChangeManager
Database implementation for Program.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `ADDED_VARIABLE_STORAGE_MANAGER_VERSION`
  `static final int`
  `ANALYSIS_OPTIONS_MOVED_VERSION`
  Key version numbers which require special upgrade handling
  `static final int`
  `AUTO_PARAMETERS_ADDED_VERSION`
  `static final int`
  `COMPOUND_VARIABLE_STORAGE_ADDED_VERSION`
  `static final String`
  `CONTENT_TYPE`
  `static final int`
  `EXTERNAL_FUNCTIONS_ADDED_VERSION`
  `static final int`
  `METADATA_ADDED_VERSION`
  `static final int`
  `RELOCATION_STATUS_ADDED_VERSION`

  ### Fields inherited from class ghidra.framework.data.DomainObjectAdapterDB

  `changeSet, dbh, NUM_UNDOS, options`

  ### Fields inherited from class ghidra.framework.data.DomainObjectAdapter

  `changed, changeSupportMap, DEFAULT_NAME, lock, metadata, name, temporary`

  ### Fields inherited from interface ghidra.program.util.ChangeManager

  `DOCR_ADDRESS_SET_PROPERTY_MAP_ADDED, DOCR_ADDRESS_SET_PROPERTY_MAP_CHANGED, DOCR_ADDRESS_SET_PROPERTY_MAP_REMOVED, DOCR_BOOKMARK_ADDED, DOCR_BOOKMARK_CHANGED, DOCR_BOOKMARK_REMOVED, DOCR_BOOKMARK_TYPE_ADDED, DOCR_BOOKMARK_TYPE_REMOVED, DOCR_CATEGORY_ADDED, DOCR_CATEGORY_MOVED, DOCR_CATEGORY_REMOVED, DOCR_CATEGORY_RENAMED, DOCR_CODE_ADDED, DOCR_CODE_MOVED, DOCR_CODE_REMOVED, DOCR_CODE_REPLACED, DOCR_CODE_UNIT_PROPERTY_ALL_REMOVED, DOCR_CODE_UNIT_PROPERTY_CHANGED, DOCR_CODE_UNIT_PROPERTY_RANGE_REMOVED, DOCR_CODE_UNIT_USER_DATA_CHANGED, DOCR_DATA_TYPE_ADDED, DOCR_DATA_TYPE_CHANGED, DOCR_DATA_TYPE_MOVED, DOCR_DATA_TYPE_REMOVED, DOCR_DATA_TYPE_RENAMED, DOCR_DATA_TYPE_REPLACED, DOCR_DATA_TYPE_SETTING_CHANGED, DOCR_EOL_COMMENT_CHANGED, DOCR_EQUATE_ADDED, DOCR_EQUATE_REFERENCE_ADDED, DOCR_EQUATE_REFERENCE_REMOVED, DOCR_EQUATE_REMOVED, DOCR_EQUATE_RENAMED, DOCR_EXTERNAL_ENTRY_POINT_ADDED, DOCR_EXTERNAL_ENTRY_POINT_REMOVED, DOCR_EXTERNAL_NAME_ADDED, DOCR_EXTERNAL_NAME_CHANGED, DOCR_EXTERNAL_NAME_REMOVED, DOCR_EXTERNAL_PATH_CHANGED, DOCR_EXTERNAL_REFERENCE_ADDED, DOCR_EXTERNAL_REFERENCE_REMOVED, DOCR_FALLTHROUGH_CHANGED, DOCR_FLOWOVERRIDE_CHANGED, DOCR_FRAGMENT_MOVED, DOCR_FUNCTION_ADDED, DOCR_FUNCTION_BODY_CHANGED, DOCR_FUNCTION_CHANGED, DOCR_FUNCTION_REMOVED, DOCR_FUNCTION_TAG_CHANGED, DOCR_FUNCTION_TAG_CREATED, DOCR_FUNCTION_TAG_DELETED, DOCR_GROUP_ADDED, DOCR_GROUP_ALIAS_CHANGED, DOCR_GROUP_COMMENT_CHANGED, DOCR_GROUP_REMOVED, DOCR_GROUP_RENAMED, DOCR_GROUP_REPARENTED, DOCR_IMAGE_BASE_CHANGED, DOCR_INT_ADDRESS_SET_PROPERTY_MAP_ADDED, DOCR_INT_ADDRESS_SET_PROPERTY_MAP_CHANGED, DOCR_INT_ADDRESS_SET_PROPERTY_MAP_REMOVED, DOCR_LANGUAGE_CHANGED, DOCR_LENGTH_OVERRIDE_CHANGED, DOCR_MEM_REF_PRIMARY_REMOVED, DOCR_MEM_REF_PRIMARY_SET, DOCR_MEM_REF_TYPE_CHANGED, DOCR_MEM_REFERENCE_ADDED, DOCR_MEM_REFERENCE_REMOVED, DOCR_MEMORY_BLOCK_ADDED, DOCR_MEMORY_BLOCK_CHANGED, DOCR_MEMORY_BLOCK_MOVED, DOCR_MEMORY_BLOCK_REMOVED, DOCR_MEMORY_BLOCK_SPLIT, DOCR_MEMORY_BLOCKS_JOINED, DOCR_MEMORY_BYTES_CHANGED, DOCR_MODULE_REORDERED, DOCR_OVERLAY_SPACE_ADDED, DOCR_OVERLAY_SPACE_REMOVED, DOCR_OVERLAY_SPACE_RENAMED, DOCR_PLATE_COMMENT_CHANGED, DOCR_POST_COMMENT_CHANGED, DOCR_PRE_COMMENT_CHANGED, DOCR_REGISTER_VALUES_CHANGED, DOCR_REPEATABLE_COMMENT_CHANGED, DOCR_SOURCE_ARCHIVE_ADDED, DOCR_SOURCE_ARCHIVE_CHANGED, DOCR_SYMBOL_ADDED, DOCR_SYMBOL_ADDRESS_CHANGED, DOCR_SYMBOL_ANCHORED_FLAG_CHANGED, DOCR_SYMBOL_ASSOCIATION_ADDED, DOCR_SYMBOL_ASSOCIATION_REMOVED, DOCR_SYMBOL_DATA_CHANGED, DOCR_SYMBOL_REMOVED, DOCR_SYMBOL_RENAMED, DOCR_SYMBOL_SCOPE_CHANGED, DOCR_SYMBOL_SET_AS_PRIMARY, DOCR_SYMBOL_SOURCE_CHANGED, DOCR_TREE_CREATED, DOCR_TREE_REMOVED, DOCR_TREE_RENAMED, DOCR_USER_DATA_CHANGED, DOCR_VARIABLE_REFERENCE_ADDED, DOCR_VARIABLE_REFERENCE_REMOVED, FUNCTION_CHANGED_CALL_FIXUP, FUNCTION_CHANGED_INLINE, FUNCTION_CHANGED_NORETURN, FUNCTION_CHANGED_PARAMETERS, FUNCTION_CHANGED_PURGE, FUNCTION_CHANGED_RETURN, FUNCTION_CHANGED_THUNK`

  ### Fields inherited from interface ghidra.framework.model.DomainObject

  `DO_DOMAIN_FILE_CHANGED, DO_OBJECT_CLOSED, DO_OBJECT_ERROR, DO_OBJECT_RENAMED, DO_OBJECT_RESTORED, DO_OBJECT_SAVED, DO_PROPERTY_CHANGED, undoLock`

  ### Fields inherited from interface ghidra.program.model.listing.Program

  `ANALYSIS_PROPERTIES, ANALYSIS_START_DATE, ANALYSIS_START_DATE_FORMAT, ANALYZED_OPTION_NAME, ASK_TO_ANALYZE_OPTION_NAME, CREATED_WITH_GHIDRA_VERSION, DATE_CREATED, DISASSEMBLER_PROPERTIES, JANUARY_1_1970, MAX_OPERANDS, PREFERRED_ROOT_NAMESPACE_CATEGORY_PROPERTY, PROGRAM_INFO`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ProgramDB(DBHandle dbh, OpenMode openMode, TaskMonitor monitor, Object consumer)`
  Constructs a new ProgramDB
  `ProgramDB(String name, Language language, CompilerSpec compilerSpec, Object consumer)`
  Constructs a new ProgramDB

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `categoryAdded(long categoryID, ProgramEvent eventType, Object oldValue, Object newValue)`
  Notification that a category was added.
  `void`
  `categoryChanged(long categoryID, ProgramEvent eventType, Object oldValue, Object newValue)`
  Notification that a category was changed.
  `protected void`
  `clearCache(boolean all)`
  `protected void`
  `close()`
  `AddressSetPropertyMap`
  `createAddressSetPropertyMap(String mapName)`
  Create a new AddressSetPropertyMap with the specified name.
  `IntRangeMapDB`
  `createIntRangeMap(String mapName)`
  Create a new IntRangeMap with the specified name.
  `ProgramOverlayAddressSpace`
  `createOverlaySpace(String overlaySpaceName, AddressSpace baseSpace)`
  Create a new overlay space based upon the given base AddressSpace
  `void`
  `dataTypeAdded(long dataTypeID, ProgramEvent eventType, Object oldValue, Object newValue)`
  Notification that a datatype was added.
  `void`
  `dataTypeChanged(long dataTypeID, ProgramEvent eventType, boolean isAutoChange, Object oldValue, Object newValue)`
  notification the a datatype has changed
  `void`
  `deleteAddressRange(Address startAddr, Address endAddr, TaskMonitor monitor)`
  Deletes given range from the program.
  `void`
  `deleteAddressSetPropertyMap(String mapName)`
  Remove the property map from the program.
  `void`
  `deleteIntRangeMap(String mapName)`
  Remove the property map from the program.
  `protected void`
  `domainObjectRestored()`
  Indicates that this domain object has been restored to a completely different state due to a transaction undo/redo/rollback or a database merge operation.
  `void`
  `flushWriteCache()`
  Flush any pending database changes.
  `void`
  `forceLock(boolean rollback, String reason)`
  Force transaction lock and terminate current transaction.
  `ProgramAddressFactory`
  `getAddressFactory()`
  Returns the AddressFactory for this program.
  `AddressMapDB`
  `getAddressMap()`
  Returns this programs address map.
  `AddressSetPropertyMap`
  `getAddressSetPropertyMap(String mapName)`
  Get the property map with the given name.
  `protected FileSystem`
  `getAssociatedUserFilesystem()`
  Returns the hidden user-filesystem associated with this objects domain file, or null if unknown.
  `BookmarkDBManager`
  `getBookmarkManager()`
  Get the bookmark manager.
  `ProgramChangeSet`
  `getChanges()`
  Get the program changes since the last save as a set of addresses.
  `CodeManager`
  `getCodeManager()`
  `String`
  `getCompiler()`
  Gets the name of the compiler believed to have been used to create this program.
  `CompilerSpec`
  `getCompilerSpec()`
  Returns the CompilerSpec currently used by this program.
  `Date`
  `getCreationDate()`
  Returns the creation date of this program.
  `ProgramDataTypeManager`
  `getDataTypeManager()`
  Returns the program's datatype manager.
  `int`
  `getDefaultPointerSize()`
  Gets the default pointer size in bytes as it may be stored within the program listing.
  `String`
  `getDescription()`
  Returns a word or short phrase that best describes or categorizes the object in terms that a user will understand.
  `EquateManager`
  `getEquateTable()`
  Get the equate table object.
  `String`
  `getExecutableFormat()`
  Returns a value corresponding to the original file format.
  `String`
  `getExecutableMD5()`
  Returns a value corresponding to the original binary file MD5 hash.
  `String`
  `getExecutablePath()`
  Gets the path to the program's executable file.
  `String`
  `getExecutableSHA256()`
  Returns a value corresponding to the original binary file SHA256 hash.
  `ExternalManagerDB`
  `getExternalManager()`
  Returns the external manager.
  `FunctionManagerDB`
  `getFunctionManager()`
  Returns the programs function manager.
  `Namespace`
  `getGlobalNamespace()`
  Returns the global namespace for this program
  `Address`
  `getImageBase()`
  Returns the current program image base address
  `IntRangeMap`
  `getIntRangeMap(String mapName)`
  Get the property map with the given name.
  `Language`
  `getLanguage()`
  Returns the language used by this program.
  `LanguageID`
  `getLanguageID()`
  Return the name of the language used by this program.
  `Listing`
  `getListing()`
  Get the listing object.
  `Address`
  `getMaxAddress()`
  Get the programs maximum address.
  `MemoryMapDB`
  `getMemory()`
  Get the memory object.
  `Map<String,String>`
  `getMetadata()`
  Returns a map containing all the stored metadata associated with this domain object.
  `Address`
  `getMinAddress()`
  Get the program's minimum address.
  `NamespaceManager`
  `getNamespaceManager()`
  `CategoryPath`
  `getPreferredRootNamespaceCategoryPath()`
  Gets the preferred root data type category path which corresponds to the global namespace of a namespace-based storage area.
  `ProgramContext`
  `getProgramContext()`
  Returns the program context.
  `ProgramUserData`
  `getProgramUserData()`
  Returns the user-specific data manager for this program.
  `ReferenceDBManager`
  `getReferenceManager()`
  Get the reference manager.
  `Register`
  `getRegister(Address addr)`
  Returns the largest register located at the specified address
  `Register`
  `getRegister(Address addr, int size)`
  Returns a specific register based upon its address and size
  `Register`
  `getRegister(Varnode varnode)`
  Returns the register which corresponds to the specified varnode
  `Register`
  `getRegister(String regName)`
  Returns the register with the given name;
  `Register[]`
  `getRegisters(Address addr)`
  Returns all registers located at the specified address
  `RelocationManager`
  `getRelocationTable()`
  Gets the relocation table.
  `SourceFileManagerDB`
  `getSourceFileManager()`
  Returns the program's `SourceFileManager`.
  `int`
  `getStoredVersion()`
  `SymbolManager`
  `getSymbolTable()`
  Get the symbol table object.
  `TreeManager`
  `getTreeManager()`
  `long`
  `getUniqueProgramID()`
  Returns an ID that is unique for this program.
  `protected DomainObjectAdapterDB`
  `getUserData()`
  Returns the user data object or null if not supported by this domain object.
  `PropertyMapManager`
  `getUsrPropertyManager()`
  Get the user propertyMangager stored with this program.
  `protected void`
  `installExtensions()`
  Install updated compiler spec extension options.
  `void`
  `invalidateWriteCache()`
  Invalidate (i.e., clear) any pending database changes not yet written.
  `boolean`
  `isChangeable()`
  Returns true if changes are permitted.
  `boolean`
  `isLanguageUpgradePending()`
  Determine if program initialization requires a language upgrade
  `boolean`
  `lock(String reason)`
  Attempt to obtain a modification lock on the domain object.
  `void`
  `moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)`
  Moves all information stored in the given range to the new location
  `Address[]`
  `parseAddress(String addrStr)`
  Return an array of Addresses that could represent the given string.
  `Address[]`
  `parseAddress(String addrStr, boolean caseSensitive)`
  Return an array of Addresses that could represent the given string.
  `void`
  `programTreeAdded(long id, ProgramEvent eventType, Object oldValue, Object newValue)`
  Notification that a program tree was added.
  `void`
  `programTreeChanged(long id, ProgramEvent eventType, Object affectedObj, Object oldValue, Object newValue)`
  Notification that a program tree was changed.
  `protected boolean`
  `propertyChanged(String propertyName, Object oldValue, Object newValue)`
  Notification of property change
  `boolean`
  `removeOverlaySpace(String overlaySpaceName)`
  Remove the specified overlay address space from this program.
  `void`
  `renameOverlaySpace(String overlaySpaceName, String newName)`
  Rename an existing overlay address space.
  `void`
  `restoreImageBase()`
  Restores the last committed image base.
  `protected void`
  `setChanged(boolean state)`
  `void`
  `setChanged(ProgramChangeRecord changeRecord)`
  `void`
  `setChanged(ProgramEvent event, Address start, Address end, Object oldValue, Object newValue)`
  Mark the state of a Program as having changed and generate the event of the specified type.
  `void`
  `setChanged(ProgramEvent event, Object oldValue, Object newValue)`
  Mark the state of a Program as having changed and generate the event of the specified type.
  `void`
  `setCompiler(String compiler)`
  Sets the name of the compiler which created this program.
  `protected void`
  `setDomainFile(DomainFile df)`
  Set the `DomainFile` associated with this instance.
  `void`
  `setEffectiveImageBase(Address imageBase)`
  Deprecated.
  `void`
  `setExecutableFormat(String format)`
  Sets the value corresponding to the original file format.
  `void`
  `setExecutableMD5(String md5)`
  Sets the value corresponding to the original binary file MD5 hash.
  `void`
  `setExecutablePath(String path)`
  Sets the path to the program's executable file.
  `void`
  `setExecutableSHA256(String sha256)`
  Sets the value corresponding to the original binary file SHA256 hash.
  `void`
  `setImageBase(Address base, boolean commit)`
  Sets the program's image base address.
  `void`
  `setLanguage(Language newLanguage, CompilerSpecID newCompilerSpecID, boolean forceRedisassembly, TaskMonitor monitor)`
  Sets the language for the program.
  `void`
  `setName(String newName)`
  Set the name for this domain object.
  `void`
  `setObjChanged(ProgramEvent eventType, Address addr, Object affectedObj, Object oldValue, Object newValue)`
  Mark the state of a Program as having changed and generate the event of the specified type.
  `void`
  `setObjChanged(ProgramEvent eventType, Object affected, Object oldValue, Object newValue)`
  Mark the state of a Program as having changed and generate the event of the specified type.
  `void`
  `setPreferredRootNamespaceCategoryPath(String categoryPath)`
  Sets the preferred data type category path which corresponds to the root of a namespace hierarchy storage area.
  `void`
  `setPropertyChanged(String propertyName, Address codeUnitAddr, Object oldValue, Object newValue)`
  Mark the state of a Program as having changed and generate the DOCR_CODE_UNIT_PROPERTY_CHANGED event.
  `void`
  `setPropertyRangeRemoved(String propertyName, Address start, Address end)`
  Mark the state of the Program as having changed and generate the DOCR_CODE_UNIT_PROPERTY_RANGE_REMOVED event.
  `void`
  `setRegisterValuesChanged(Register register, Address start, Address end)`
  Notifies that register values have changed over the indicated address range.
  `void`
  `sourceArchiveAdded(UniversalID sourceArchiveID, ProgramEvent eventType)`
  `void`
  `sourceArchiveChanged(UniversalID sourceArchiveID, ProgramEvent eventType)`
  `void`
  `symbolAdded(Symbol symbol, ProgramEvent eventType, Address addr, Object oldValue, Object newValue)`
  Notification that a symbol was added.
  `void`
  `symbolChanged(Symbol symbol, ProgramEvent eventType, Address addr, Object affectedObj, Object oldValue, Object newValue)`
  Notification that a symbol was changed.
  `void`
  `tagChanged(FunctionTag tag, ProgramEvent eventType, Object oldValue, Object newValue)`
  Notification that a `FunctionTag` was changed.
  `void`
  `tagCreated(FunctionTag tag, ProgramEvent eventType)`
  Notification that a new `FunctionTag` was created.
  `void`
  `unlock()`
  Release a modification lock previously granted with the lock method.
  `protected void`
  `updateMetadata()`
  This method is called before a save, saveAs, or saveToPackedFile to update common meta data
  `protected void`
  `userDataChanged(String propertyName, Object oldValue, Object newValue)`

  ### Methods inherited from class ghidra.framework.data.DomainObjectAdapterDB

  `addSynchronizedDomainObject, addTransactionListener, canLock, canRedo, canSave, canUndo, clearUndo, clearUndo, dbError, endTransaction, getAllRedoNames, getAllUndoNames, getChangeSet, getCurrentTransactionInfo, getDBHandle, getOptions, getOptionsNames, getRedoName, getSynchronizedDomainObjects, getUndoName, getUndoStackDepth, hasTerminatedTransaction, invalidate, isChanged, isClosed, isLocked, loadMetadata, openTransaction, performPropertyListAlterations, redo, releaseSynchronizedDomainObject, removeTransactionListener, save, saveMetadata, saveToPackedFile, setImmutable, startTransaction, startTransaction, undo`

  ### Methods inherited from class ghidra.framework.data.DomainObjectAdapter

  `addCloseListener, addConsumer, addDomainFileListener, addListener, checkExclusiveAccess, createPrivateEventQueue, fatalErrorOccurred, fireEvent, flushEvents, flushPrivateEventQueue, getChangeStatus, getConsumerList, getContentHandler, getContentHandler, getContentHandler, getContentHandlers, getDomainFile, getLock, getModificationNumber, getName, hasExclusiveAccess, isSendingEvents, isTemporary, isUsedBy, release, removeCloseListener, removeDomainFileListener, removeListener, removePrivateEventQueue, setEventsEnabled, setTemporary, toString`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface ghidra.framework.model.DomainObject

  `addCloseListener, addConsumer, addDomainFileListener, addListener, addSynchronizedDomainObject, addTransactionListener, canLock, canRedo, canSave, canUndo, clearUndo, createPrivateEventQueue, endTransaction, flushEvents, flushPrivateEventQueue, getAllRedoNames, getAllUndoNames, getConsumerList, getCurrentTransactionInfo, getDomainFile, getModificationNumber, getName, getOptions, getOptionsNames, getRedoName, getSynchronizedDomainObjects, getUndoName, hasExclusiveAccess, hasTerminatedTransaction, isChanged, isClosed, isLocked, isSendingEvents, isTemporary, isUsedBy, openTransaction, redo, release, releaseSynchronizedDomainObject, removeCloseListener, removeDomainFileListener, removeListener, removePrivateEventQueue, removeTransactionListener, save, saveToPackedFile, setEventsEnabled, setTemporary, startTransaction, startTransaction, undo, withTransaction, withTransaction`

  ### Methods inherited from interface ghidra.program.model.lang.ProgramArchitecture

  `getLanguageCompilerSpecPair`

- ## Field Details

  - ### CONTENT_TYPE

    public static final String CONTENT_TYPE
    See Also:
      - Constant Field Values

  - ### ANALYSIS_OPTIONS_MOVED_VERSION

    public static final int ANALYSIS_OPTIONS_MOVED_VERSION
    Key version numbers which require special upgrade handling
    See Also:
      - Constant Field Values

  - ### ADDED_VARIABLE_STORAGE_MANAGER_VERSION

    public static final int ADDED_VARIABLE_STORAGE_MANAGER_VERSION
    See Also:
      - Constant Field Values

  - ### METADATA_ADDED_VERSION

    public static final int METADATA_ADDED_VERSION
    See Also:
      - Constant Field Values

  - ### EXTERNAL_FUNCTIONS_ADDED_VERSION

    public static final int EXTERNAL_FUNCTIONS_ADDED_VERSION
    See Also:
      - Constant Field Values

  - ### COMPOUND_VARIABLE_STORAGE_ADDED_VERSION

    public static final int COMPOUND_VARIABLE_STORAGE_ADDED_VERSION
    See Also:
      - Constant Field Values

  - ### AUTO_PARAMETERS_ADDED_VERSION

    public static final int AUTO_PARAMETERS_ADDED_VERSION
    See Also:
      - Constant Field Values

  - ### RELOCATION_STATUS_ADDED_VERSION

    public static final int RELOCATION_STATUS_ADDED_VERSION
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### ProgramDB

    public ProgramDB(String name, Language language, CompilerSpec compilerSpec, Object consumer) throws IOException
    Constructs a new ProgramDB
    Parameters:
      `name` - the name of the program
      `language` - the Language used by this program
      `compilerSpec` - compiler specification
      `consumer` - the object that is using this program.
    Throws:
      `IOException` - if there is an error accessing the database.

  - ### ProgramDB

    public ProgramDB(DBHandle dbh, OpenMode openMode, TaskMonitor monitor, Object consumer) throws IOException, VersionException, LanguageNotFoundException, CancelledException
    Constructs a new ProgramDB
    Parameters:
      `dbh` - a handle to an open program database.
      `openMode` - one of: READ_ONLY: the original database will not be modified UPDATE: the database can be written to. UPGRADE: the database is upgraded to the latest schema as it is opened.
      `monitor` - TaskMonitor that allows the open to be canceled.
      `consumer` - the object that keeping the program open.
    Throws:
      `IOException` - if an error accessing the database occurs.
      `VersionException` - if database version does not match implementation, UPGRADE may be possible.
      `CancelledException` - if instantiation is canceled by monitor
      `LanguageNotFoundException` - if a language cannot be found for this program

- ## Method Details

  - ### isLanguageUpgradePending

    public boolean isLanguageUpgradePending()
    Determine if program initialization requires a language upgrade
    Returns:
      true if language upgrade is pending

  - ### setDomainFile

    protected void setDomainFile(DomainFile df)
    Description copied from class: `DomainObjectAdapter`
    Set the `DomainFile` associated with this instance.
    Overrides:
      `setDomainFile` in class `DomainObjectAdapter`
    Parameters:
      `df` - domain file

  - ### propertyChanged

    protected boolean propertyChanged(String propertyName, Object oldValue, Object newValue)
    Description copied from class: `DomainObjectAdapterDB`
    Notification of property change
    Overrides:
      `propertyChanged` in class `DomainObjectAdapterDB`
    Parameters:
      `propertyName` -
      `oldValue` -
      `newValue` -
    Returns:
      true if change is OK, false value should be reverted

  - ### getProgramUserData

    public ProgramUserData getProgramUserData()
    Description copied from interface: `Program`
    Returns the user-specific data manager for this program.
    Specified by:
      `getProgramUserData` in interface `Program`
    Returns:
      the program-specific user data manager

  - ### getAssociatedUserFilesystem

    protected FileSystem getAssociatedUserFilesystem()
    Description copied from class: `DomainObjectAdapter`
    Returns the hidden user-filesystem associated with this objects domain file, or null if unknown.
    Overrides:
      `getAssociatedUserFilesystem` in class `DomainObjectAdapter`
    Returns:
      user data file system

  - ### getUserData

    protected DomainObjectAdapterDB getUserData()
    Description copied from class: `DomainObjectAdapterDB`
    Returns the user data object or null if not supported by this domain object.
    Overrides:
      `getUserData` in class `DomainObjectAdapterDB`

  - ### getListing

    public Listing getListing()
    Description copied from interface: `Program`
    Get the listing object.
    Specified by:
      `getListing` in interface `Program`
    Returns:
      the Listing interface to the listing object.

  - ### getSymbolTable

    public SymbolManager getSymbolTable()
    Description copied from interface: `Program`
    Get the symbol table object.
    Specified by:
      `getSymbolTable` in interface `Program`
    Returns:
      the symbol table object.

  - ### getExternalManager

    public ExternalManagerDB getExternalManager()
    Description copied from interface: `Program`
    Returns the external manager.
    Specified by:
      `getExternalManager` in interface `Program`
    Returns:
      the external manager

  - ### getEquateTable

    public EquateManager getEquateTable()
    Description copied from interface: `Program`
    Get the equate table object.
    Specified by:
      `getEquateTable` in interface `Program`
    Returns:
      the equate table.

  - ### getMemory

    public MemoryMapDB getMemory()
    Description copied from interface: `Program`
    Get the memory object.
    Specified by:
      `getMemory` in interface `Program`
    Returns:
      the memory object.

  - ### getNamespaceManager

    public NamespaceManager getNamespaceManager()

  - ### getReferenceManager

    public ReferenceDBManager getReferenceManager()
    Description copied from interface: `Program`
    Get the reference manager.
    Specified by:
      `getReferenceManager` in interface `Program`
    Returns:
      the reference manager

  - ### getCodeManager

    public CodeManager getCodeManager()

  - ### getTreeManager

    public TreeManager getTreeManager()

  - ### getDataTypeManager

    public ProgramDataTypeManager getDataTypeManager()
    Description copied from interface: `Program`
    Returns the program's datatype manager.
    Specified by:
      `getDataTypeManager` in interface `DataTypeManagerOwner`
    Specified by:
      `getDataTypeManager` in interface `Program`
    Returns:
      the data type manager.

  - ### getFunctionManager

    public FunctionManagerDB getFunctionManager()
    Description copied from interface: `Program`
    Returns the programs function manager.
    Specified by:
      `getFunctionManager` in interface `Program`
    Returns:
      the function manager

  - ### getBookmarkManager

    public BookmarkDBManager getBookmarkManager()
    Description copied from interface: `Program`
    Get the bookmark manager.
    Specified by:
      `getBookmarkManager` in interface `Program`
    Returns:
      the bookmark manager

  - ### getRelocationTable

    public RelocationManager getRelocationTable()
    Description copied from interface: `Program`
    Gets the relocation table.
    Specified by:
      `getRelocationTable` in interface `Program`
    Returns:
      relocation table object

  - ### getSourceFileManager

    public SourceFileManagerDB getSourceFileManager()
    Description copied from interface: `Program`
    Returns the program's `SourceFileManager`.
    Specified by:
      `getSourceFileManager` in interface `Program`
    Returns:
      the source file manager

  - ### getCompiler

    public String getCompiler()
    Description copied from interface: `Program`
    Gets the name of the compiler believed to have been used to create this program. If the compiler hasn't been determined then "unknown" is returned.
    Specified by:
      `getCompiler` in interface `Program`
    Returns:
      name of the compiler or "unknown".

  - ### setCompiler

    public void setCompiler(String compiler)
    Description copied from interface: `Program`
    Sets the name of the compiler which created this program.
    Specified by:
      `setCompiler` in interface `Program`
    Parameters:
      `compiler` - the name

  - ### getPreferredRootNamespaceCategoryPath

    public CategoryPath getPreferredRootNamespaceCategoryPath()
    Description copied from interface: `Program`
    Gets the preferred root data type category path which corresponds to the global namespace of a namespace-based storage area. Preference will be given to this category when searching for data types within a specific namespace. This setting corresponds to the Program Information option "Preferred Root Namespace Category. See `DataTypeUtilities` and its various find methods for its usage details.
    Specified by:
      `getPreferredRootNamespaceCategoryPath` in interface `Program`
    Returns:
      data type category path for root namespace or null if not set or is invalid.

  - ### setPreferredRootNamespaceCategoryPath

    public void setPreferredRootNamespaceCategoryPath(String categoryPath)
    Description copied from interface: `Program`
    Sets the preferred data type category path which corresponds to the root of a namespace hierarchy storage area. Preference will be given to this category when searching for data types within a specific namespace. This setting corresponds to the Program Information option "Preferred Root Namespace Category. See `DataTypeUtilities` and its various find methods for its usage details.
    Specified by:
      `setPreferredRootNamespaceCategoryPath` in interface `Program`
    Parameters:
      `categoryPath` - data type category path for root namespace or null to clear option. The specified path must be absolute and start with "/" and must not end with one (e.g., /ClassDataTypes). An invalid path setting will be ignored.

  - ### getExecutablePath

    public String getExecutablePath()
    Description copied from interface: `Program`
    Gets the path to the program's executable file. For example, `/home/user/foo.exe`. This will allow plugins to execute the program.

    NOTE: The format of the path is not guaranteed to follow any standard naming conventions. If used for anything other than display purpose, callers of this method should take extra steps to ensure the path is in a form suitable for their needs.

    Specified by:
      `getExecutablePath` in interface `Program`
    Returns:
      String path to program's exe file

  - ### setExecutablePath

    public void setExecutablePath(String path)
    Description copied from interface: `Program`
    Sets the path to the program's executable file. For example, `/home/user/foo.exe`.
    Specified by:
      `setExecutablePath` in interface `Program`
    Parameters:
      `path` - the path to the program's exe

  - ### getExecutableFormat

    public String getExecutableFormat()
    Description copied from interface: `Program`
    Returns a value corresponding to the original file format.
    Specified by:
      `getExecutableFormat` in interface `Program`
    Returns:
      original file format used to load program or null if unknown

  - ### setExecutableFormat

    public void setExecutableFormat(String format)
    Description copied from interface: `Program`
    Sets the value corresponding to the original file format.
    Specified by:
      `setExecutableFormat` in interface `Program`
    Parameters:
      `format` - the binary file format string to set.

  - ### getExecutableMD5

    public String getExecutableMD5()
    Description copied from interface: `Program`
    Returns a value corresponding to the original binary file MD5 hash.
    Specified by:
      `getExecutableMD5` in interface `Program`
    Returns:
      original loaded file MD5 or null

  - ### setExecutableMD5

    public void setExecutableMD5(String md5)
    Description copied from interface: `Program`
    Sets the value corresponding to the original binary file MD5 hash.
    Specified by:
      `setExecutableMD5` in interface `Program`
    Parameters:
      `md5` - MD5 binary file hash

  - ### getExecutableSHA256

    public String getExecutableSHA256()
    Description copied from interface: `Program`
    Returns a value corresponding to the original binary file SHA256 hash.
    Specified by:
      `getExecutableSHA256` in interface `Program`
    Returns:
      original loaded file SHA256 or null

  - ### setExecutableSHA256

    public void setExecutableSHA256(String sha256)
    Description copied from interface: `Program`
    Sets the value corresponding to the original binary file SHA256 hash.
    Specified by:
      `setExecutableSHA256` in interface `Program`
    Parameters:
      `sha256` - SHA256 binary file hash

  - ### getCreationDate

    public Date getCreationDate()
    Description copied from interface: `Program`
    Returns the creation date of this program. If the program was created before this property existed, then Jan 1, 1970 is returned.
    Specified by:
      `getCreationDate` in interface `Program`
    Returns:
      the creation date of this program

  - ### getDefaultPointerSize

    public int getDefaultPointerSize()
    Description copied from interface: `Program`
    Gets the default pointer size in bytes as it may be stored within the program listing.
    Specified by:
      `getDefaultPointerSize` in interface `Program`
    Returns:
      default pointer size.
    See Also:
      - `DataOrganization.getPointerSize()`

  - ### getLanguageID

    public LanguageID getLanguageID()
    Description copied from interface: `Program`
    Return the name of the language used by this program.
    Specified by:
      `getLanguageID` in interface `Program`
    Returns:
      the name of the language

  - ### getLanguage

    public Language getLanguage()
    Description copied from interface: `Program`
    Returns the language used by this program.
    Specified by:
      `getLanguage` in interface `Program`
    Specified by:
      `getLanguage` in interface `ProgramArchitecture`
    Returns:
      the language used by this program.

  - ### getCompilerSpec

    public CompilerSpec getCompilerSpec()
    Description copied from interface: `Program`
    Returns the CompilerSpec currently used by this program.
    Specified by:
      `getCompilerSpec` in interface `Program`
    Specified by:
      `getCompilerSpec` in interface `ProgramArchitecture`
    Returns:
      the compilerSpec currently used by this program.

  - ### getUsrPropertyManager

    public PropertyMapManager getUsrPropertyManager()
    Description copied from interface: `Program`
    Get the user propertyMangager stored with this program. The user property manager is used to store arbitrary address indexed information associated with the program.
    Specified by:
      `getUsrPropertyManager` in interface `Program`
    Returns:
      the user property manager.

  - ### getProgramContext

    public ProgramContext getProgramContext()
    Description copied from interface: `Program`
    Returns the program context.
    Specified by:
      `getProgramContext` in interface `Program`
    Returns:
      the program context object

  - ### getMinAddress

    public Address getMinAddress()
    Description copied from interface: `Program`
    Get the program's minimum address. NOTE: An `AddressRange` should generally not be formed using this address and `Program.getMaxAddress()` since it may span multiple `AddressSpace`s.
    Specified by:
      `getMinAddress` in interface `Program`
    Returns:
      the program's minimum address or null if no memory blocks have been defined in the program.

  - ### getMaxAddress

    public Address getMaxAddress()
    Description copied from interface: `Program`
    Get the programs maximum address. NOTE: An `AddressRange` should generally not be formed using this address and `Program.getMinAddress()` since it may span multiple `AddressSpace`s.
    Specified by:
      `getMaxAddress` in interface `Program`
    Returns:
      the program's maximum address or null if no memory blocks have been defined in the program.

  - ### getChanges

    public ProgramChangeSet getChanges()
    Description copied from interface: `Program`
    Get the program changes since the last save as a set of addresses.
    Specified by:
      `getChanges` in interface `Program`
    Returns:
      set of changed addresses within program.

  - ### getAddressFactory

    public ProgramAddressFactory getAddressFactory()
    Description copied from interface: `Program`
    Returns the AddressFactory for this program.
    Specified by:
      `getAddressFactory` in interface `Program`
    Specified by:
      `getAddressFactory` in interface `ProgramArchitecture`
    Returns:
      the program address factory

  - ### getAddressMap

    public AddressMapDB getAddressMap()
    Returns this programs address map. NOTE: This method should be dropped from the `Program` interface to help discourage the its use external to this implementation since bad assumptions are frequently made about address keys which may not be ordered or sequential across an entire address space.
    Specified by:
      `getAddressMap` in interface `Program`
    Returns:
      internal address map

  - ### parseAddress

    public Address[] parseAddress(String addrStr)
    Description copied from interface: `Program`
    Return an array of Addresses that could represent the given string.
    Specified by:
      `parseAddress` in interface `Program`
    Parameters:
      `addrStr` - the string to parse.
    Returns:
      zero length array if addrStr is properly formatted but no matching addresses were found or if the address is improperly formatted.

  - ### parseAddress

    public Address[] parseAddress(String addrStr, boolean caseSensitive)
    Description copied from interface: `Program`
    Return an array of Addresses that could represent the given string.
    Specified by:
      `parseAddress` in interface `Program`
    Parameters:
      `addrStr` - the string to parse.
      `caseSensitive` - whether or not to process any addressSpace names as case sensitive.
    Returns:
      zero length array if addrStr is properly formatted but no matching addresses were found or if the address is improperly formatted.

  - ### dataTypeChanged

    public void dataTypeChanged(long dataTypeID, ProgramEvent eventType, boolean isAutoChange, Object oldValue, Object newValue)
    notification the a datatype has changed
    Parameters:
      `dataTypeID` - the id of the datatype that changed.
      `eventType` - the type of the change (moved, renamed, etc.)
      `isAutoChange` - true if change was an automatic change in response to another datatype's change (e.g., size, alignment), else false in which case this change will be added to program change-set to aid merge conflict detection.
      `oldValue` - the old datatype.
      `newValue` - the new datatype.

  - ### dataTypeAdded

    public void dataTypeAdded(long dataTypeID, ProgramEvent eventType, Object oldValue, Object newValue)
    Notification that a datatype was added.
    Parameters:
      `dataTypeID` - the id if the datatype that was added.
      `eventType` - should always be DATATYPE_ADDED
      `oldValue` - always null
      `newValue` - the datatype added.

  - ### categoryChanged

    public void categoryChanged(long categoryID, ProgramEvent eventType, Object oldValue, Object newValue)
    Notification that a category was changed.
    Parameters:
      `categoryID` - the id of the datatype that was added.
      `eventType` - the type of change.
      `oldValue` - old value depends on the type.
      `newValue` - new value depends on the type.

  - ### categoryAdded

    public void categoryAdded(long categoryID, ProgramEvent eventType, Object oldValue, Object newValue)
    Notification that a category was added.
    Parameters:
      `categoryID` - the id of the datatype that was added.
      `eventType` - the type of change (should always be CATEGORY_ADDED)
      `oldValue` - always null
      `newValue` - new value depends on the type.

  - ### sourceArchiveAdded

    public void sourceArchiveAdded(UniversalID sourceArchiveID, ProgramEvent eventType)

  - ### sourceArchiveChanged

    public void sourceArchiveChanged(UniversalID sourceArchiveID, ProgramEvent eventType)

  - ### programTreeAdded

    public void programTreeAdded(long id, ProgramEvent eventType, Object oldValue, Object newValue)
    Notification that a program tree was added.
    Parameters:
      `id` - the id of the program tree that was added.
      `eventType` - the type of change
      `oldValue` - old value is null
      `newValue` - new value depends the tree that was added.

  - ### programTreeChanged

    public void programTreeChanged(long id, ProgramEvent eventType, Object affectedObj, Object oldValue, Object newValue)
    Notification that a program tree was changed.
    Parameters:
      `id` - the id of the program tree that was changed.
      `eventType` - the `EventType` for this event
      `affectedObj` - the object that was changed
      `oldValue` - old value depends on the type of the change
      `newValue` - old value depends on the type of the change

  - ### tagChanged

    public void tagChanged(FunctionTag tag, ProgramEvent eventType, Object oldValue, Object newValue)
    Notification that a `FunctionTag` was changed. This can be either an edit or a delete.
    Parameters:
      `tag` - the tag that was changed.
      `eventType` - the type of change
      `oldValue` - old value
      `newValue` - new value

  - ### tagCreated

    public void tagCreated(FunctionTag tag, ProgramEvent eventType)
    Notification that a new `FunctionTag` was created.
    Parameters:
      `tag` - the tag that was created.
      `eventType` - the type of change

  - ### symbolChanged

    public void symbolChanged(Symbol symbol, ProgramEvent eventType, Address addr, Object affectedObj, Object oldValue, Object newValue)
    Notification that a symbol was changed.
    Parameters:
      `symbol` - the symbol that was changed.
      `eventType` - the type of change
      `addr` - the address of the symbol that changed
      `affectedObj` - the object that was changed
      `oldValue` - old value depends on the type of the change
      `newValue` - old value depends on the type of the change

  - ### symbolAdded

    public void symbolAdded(Symbol symbol, ProgramEvent eventType, Address addr, Object oldValue, Object newValue)
    Notification that a symbol was added.
    Parameters:
      `symbol` - the symbol that was added.
      `eventType` - the type of change
      `addr` - the address of the symbol that added
      `oldValue` - old value depends on the type of the change
      `newValue` - old value depends on the type of the change

  - ### setRegisterValuesChanged

    public void setRegisterValuesChanged(Register register, Address start, Address end)
    Description copied from interface: `ChangeManager`
    Notifies that register values have changed over the indicated address range.
    Specified by:
      `setRegisterValuesChanged` in interface `ChangeManager`
    Parameters:
      `register` - register value which was modified (a value of null indicates all registers affected or unknown)
      `start` - the start address for the range where values changed
      `end` - the end address (inclusive) for the range where values changed

  - ### setChanged

    public void setChanged(ProgramEvent event, Object oldValue, Object newValue)
    Description copied from interface: `ChangeManager`
    Mark the state of a Program as having changed and generate the event of the specified type. Any or all parameters may be null.
    Specified by:
      `setChanged` in interface `ChangeManager`
    Parameters:
      `event` - the event type
      `oldValue` - original value or an Object that is related to the event
      `newValue` - new value or an Object that is related to the the event

  - ### setChanged

    public void setChanged(ProgramChangeRecord changeRecord)

  - ### setChanged

    public void setChanged(ProgramEvent event, Address start, Address end, Object oldValue, Object newValue)
    Description copied from interface: `ChangeManager`
    Mark the state of a Program as having changed and generate the event of the specified type. Any or all parameters may be null.
    Specified by:
      `setChanged` in interface `ChangeManager`
    Parameters:
      `event` - the event type
      `start` - starting address that is affected by the event
      `end` - ending address that is affected by the event
      `oldValue` - original value or an Object that is related to the event
      `newValue` - new value or an Object that is related to the the event

  - ### setObjChanged

    public void setObjChanged(ProgramEvent eventType, Object affected, Object oldValue, Object newValue)
    Description copied from interface: `ChangeManager`
    Mark the state of a Program as having changed and generate the event of the specified type. Any or all parameters may be null.
    Specified by:
      `setObjChanged` in interface `ChangeManager`
    Parameters:
      `eventType` - the event type
      `affected` - object that is the subject of the event
      `oldValue` - original value or an Object that is related to the event
      `newValue` - new value or an Object that is related to the the event

  - ### setObjChanged

    public void setObjChanged(ProgramEvent eventType, Address addr, Object affectedObj, Object oldValue, Object newValue)
    Description copied from interface: `ChangeManager`
    Mark the state of a Program as having changed and generate the event of the specified type. Any or all parameters may be null.
    Specified by:
      `setObjChanged` in interface `ChangeManager`
    Parameters:
      `eventType` - the event type
      `addr` - program address affected
      `affectedObj` - object that is the subject of the event
      `oldValue` - original value or an Object that is related to the event
      `newValue` - new value or an Object that is related to the the event

  - ### setPropertyChanged

    public void setPropertyChanged(String propertyName, Address codeUnitAddr, Object oldValue, Object newValue)
    Description copied from interface: `ChangeManager`
    Mark the state of a Program as having changed and generate the DOCR_CODE_UNIT_PROPERTY_CHANGED event.
    Specified by:
      `setPropertyChanged` in interface `ChangeManager`
    Parameters:
      `propertyName` - name of property for the range that changed
      `codeUnitAddr` - address of the code unit with the property change
      `oldValue` - old value for the property
      `newValue` - new value for the property

  - ### setPropertyRangeRemoved

    public void setPropertyRangeRemoved(String propertyName, Address start, Address end)
    Description copied from interface: `ChangeManager`
    Mark the state of the Program as having changed and generate the DOCR_CODE_UNIT_PROPERTY_RANGE_REMOVED event.
    Specified by:
      `setPropertyRangeRemoved` in interface `ChangeManager`
    Parameters:
      `propertyName` - name of property for the range being removed
      `start` - start address of the range
      `end` - end address of the range

  - ### userDataChanged

    protected void userDataChanged(String propertyName, Object oldValue, Object newValue)

  - ### setName

    public void setName(String newName)
    Description copied from interface: `DomainObject`
    Set the name for this domain object.
    Specified by:
      `setName` in interface `DomainObject`
    Overrides:
      `setName` in class `DomainObjectAdapter`
    Parameters:
      `newName` - object name

  - ### createOverlaySpace

    public ProgramOverlayAddressSpace createOverlaySpace(String overlaySpaceName, AddressSpace baseSpace) throws IllegalStateException, DuplicateNameException, InvalidNameException, LockException
    Description copied from interface: `Program`
    Create a new overlay space based upon the given base AddressSpace
    Specified by:
      `createOverlaySpace` in interface `Program`
    Parameters:
      `overlaySpaceName` - the name of the new overlay space.
      `baseSpace` - the base AddressSpace to overlay (i.e., overlayed-space)
    Returns:
      the new overlay space
    Throws:
      `IllegalStateException` - if image base override is active
      `DuplicateNameException` - if an address space already exists with specified overlaySpaceName.
      `InvalidNameException` - if overlaySpaceName contains invalid characters
      `LockException` - if the program is shared and not checked out exclusively.

  - ### renameOverlaySpace

    public void renameOverlaySpace(String overlaySpaceName, String newName) throws NotFoundException, InvalidNameException, DuplicateNameException, LockException
    Description copied from interface: `Program`
    Rename an existing overlay address space. NOTE: This experimental method has known limitations with existing `Address` and `AddressSpace` objects following an undo/redo which may continue to refer to the old overlay name which may lead to unxpected errors.
    Specified by:
      `renameOverlaySpace` in interface `Program`
    Parameters:
      `overlaySpaceName` - overlay address space name
      `newName` - new name for overlay
    Throws:
      `NotFoundException` - if the specified overlay space was not found
      `InvalidNameException` - if new name is invalid
      `DuplicateNameException` - if new name already used by another address space
      `LockException` - if program does not has exclusive access

  - ### removeOverlaySpace

    public boolean removeOverlaySpace(String overlaySpaceName) throws LockException, NotFoundException
    Description copied from interface: `Program`
    Remove the specified overlay address space from this program.
    Specified by:
      `removeOverlaySpace` in interface `Program`
    Parameters:
      `overlaySpaceName` - overlay address space name
    Returns:
      true if successfully removed, else false if blocks still make use of overlay space.
    Throws:
      `LockException` - if program does not has exclusive access
      `NotFoundException` - if specified overlay space not found in program

  - ### getImageBase

    public Address getImageBase()
    Description copied from interface: `Program`
    Returns the current program image base address
    Specified by:
      `getImageBase` in interface `Program`
    Returns:
      program image base address within default space

  - ### setEffectiveImageBase

    @Deprecated public void setEffectiveImageBase(Address imageBase)
    Deprecated.

  - ### setImageBase

    public void setImageBase(Address base, boolean commit) throws AddressOverflowException, LockException, IllegalStateException
    Description copied from interface: `Program`
    Sets the program's image base address.
    Specified by:
      `setImageBase` in interface `Program`
    Parameters:
      `base` - the new image base address;
      `commit` - if false, then the image base change is temporary and does not really change the program and will be lost once the program is closed. If true, the change is permanent and marks the program as "changed" (needs saving).
    Throws:
      `AddressOverflowException` - if the new image would cause a memory block to end past the the address space.
      `LockException` - if the program is shared and the user does not have an exclusive checkout. This will never be thrown if commit is false.
      `IllegalStateException` - if the program state is not suitable for setting the image base.

  - ### restoreImageBase

    public void restoreImageBase()
    Description copied from interface: `Program`
    Restores the last committed image base.
    Specified by:
      `restoreImageBase` in interface `Program`

  - ### getDescription

    public String getDescription()
    Description copied from interface: `DomainObject`
    Returns a word or short phrase that best describes or categorizes the object in terms that a user will understand.
    Specified by:
      `getDescription` in interface `DomainObject`
    Specified by:
      `getDescription` in class `DomainObjectAdapter`
    Returns:
      the description

  - ### getStoredVersion

    public int getStoredVersion() throws IOException
    Throws:
      `IOException`

  - ### clearCache

    protected void clearCache(boolean all)
    Overrides:
      `clearCache` in class `DomainObjectAdapterDB`

  - ### isChangeable

    public boolean isChangeable()
    Description copied from interface: `DomainObject`
    Returns true if changes are permitted.
    Specified by:
      `isChangeable` in interface `DomainObject`
    Returns:
      true if changes are permitted.

  - ### getRegister

    public Register getRegister(Address addr)
    Description copied from interface: `Program`
    Returns the largest register located at the specified address
    Specified by:
      `getRegister` in interface `Program`
    Parameters:
      `addr` - register minimum address
    Returns:
      largest register at addr or null

  - ### getRegisters

    public Register[] getRegisters(Address addr)
    Description copied from interface: `Program`
    Returns all registers located at the specified address
    Specified by:
      `getRegisters` in interface `Program`
    Parameters:
      `addr` - register minimum address
    Returns:
      all registers at addr

  - ### getRegister

    public Register getRegister(Address addr, int size)
    Description copied from interface: `Program`
    Returns a specific register based upon its address and size
    Specified by:
      `getRegister` in interface `Program`
    Parameters:
      `addr` - register address
      `size` - the size of the register (in bytes);
    Returns:
      register or null

  - ### getRegister

    public Register getRegister(Varnode varnode)
    Description copied from interface: `Program`
    Returns the register which corresponds to the specified varnode
    Specified by:
      `getRegister` in interface `Program`
    Parameters:
      `varnode` - the varnode
    Returns:
      register or null

  - ### getRegister

    public Register getRegister(String regName)
    Description copied from interface: `Program`
    Returns the register with the given name;
    Specified by:
      `getRegister` in interface `Program`
    Parameters:
      `regName` - the name of the register to retrieve
    Returns:
      register or null

  - ### setChanged

    protected void setChanged(boolean state)
    Overrides:
      `setChanged` in class `DomainObjectAdapterDB`

  - ### deleteAddressRange

    public void deleteAddressRange(Address startAddr, Address endAddr, TaskMonitor monitor) throws RollbackException
    Deletes given range from the program.
    Parameters:
      `startAddr` - the first address in the range.
      `endAddr` - the last address in the range.
      `monitor` - the task monitor to use while deleting information in the given range.
    Throws:
      `RollbackException` - if the user cancelled the operation via the task monitor.

  - ### moveAddressRange

    public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor) throws AddressOverflowException, RollbackException
    Moves all information stored in the given range to the new location
    Parameters:
      `fromAddr` - the first address in the range to be moved
      `toAddr` - the address to move to
      `length` - the number of addresses to move
      `monitor` - the task monitor to use while deleting information in the given range
    Throws:
      `AddressOverflowException` - if there is a problem moving address ranges
      `RollbackException` - if the user cancelled the operation via the task monitor

  - ### getGlobalNamespace

    public Namespace getGlobalNamespace()
    Description copied from interface: `Program`
    Returns the global namespace for this program
    Specified by:
      `getGlobalNamespace` in interface `Program`
    Returns:
      the global namespace

  - ### setLanguage

    public void setLanguage(Language newLanguage, CompilerSpecID newCompilerSpecID, boolean forceRedisassembly, TaskMonitor monitor) throws IllegalStateException, IncompatibleLanguageException, LockException
    Description copied from interface: `Program`
    Sets the language for the program. If the new language is "compatible" with the old language, the addressMap is adjusted then the program is "re-disassembled".
    Specified by:
      `setLanguage` in interface `Program`
    Parameters:
      `newLanguage` - the new language to use.
      `newCompilerSpecID` - the new compiler specification ID
      `forceRedisassembly` - if true a redisassembly will be forced. This should always be false.
      `monitor` - the task monitor
    Throws:
      `IllegalStateException` - thrown if any error occurs, including a cancelled monitor, which leaves this program object in an unusable state. The current transaction should be aborted and the program instance discarded.
      `IncompatibleLanguageException` - thrown if the new language is too different from the existing language.
      `LockException` - if the program is shared and not checked out exclusively.

  - ### createAddressSetPropertyMap

    public AddressSetPropertyMap createAddressSetPropertyMap(String mapName) throws DuplicateNameException
    Description copied from interface: `Program`
    Create a new AddressSetPropertyMap with the specified name.
    Specified by:
      `createAddressSetPropertyMap` in interface `Program`
    Parameters:
      `mapName` - name of the property map.
    Returns:
      the newly created property map.
    Throws:
      `DuplicateNameException` - if a property map already exists with the given name.

  - ### getAddressSetPropertyMap

    public AddressSetPropertyMap getAddressSetPropertyMap(String mapName)
    Description copied from interface: `Program`
    Get the property map with the given name.
    Specified by:
      `getAddressSetPropertyMap` in interface `Program`
    Parameters:
      `mapName` - name of the property map
    Returns:
      null if no property map exist with the given name

  - ### deleteAddressSetPropertyMap

    public void deleteAddressSetPropertyMap(String mapName)
    Description copied from interface: `Program`
    Remove the property map from the program.
    Specified by:
      `deleteAddressSetPropertyMap` in interface `Program`
    Parameters:
      `mapName` - name of the property map to remove

  - ### createIntRangeMap

    public IntRangeMapDB createIntRangeMap(String mapName) throws DuplicateNameException
    Description copied from interface: `Program`
    Create a new IntRangeMap with the specified name.
    Specified by:
      `createIntRangeMap` in interface `Program`
    Parameters:
      `mapName` - name of the property map.
    Returns:
      the newly created property map.
    Throws:
      `DuplicateNameException` - if a property map already exists with the given name.

  - ### getIntRangeMap

    public IntRangeMap getIntRangeMap(String mapName)
    Description copied from interface: `Program`
    Get the property map with the given name.
    Specified by:
      `getIntRangeMap` in interface `Program`
    Parameters:
      `mapName` - name of the property map
    Returns:
      null if no property map exist with the given name

  - ### deleteIntRangeMap

    public void deleteIntRangeMap(String mapName)
    Description copied from interface: `Program`
    Remove the property map from the program.
    Specified by:
      `deleteIntRangeMap` in interface `Program`
    Parameters:
      `mapName` - name of the property map to remove

  - ### close

    protected void close()
    Overrides:
      `close` in class `DomainObjectAdapterDB`

  - ### getMetadata

    public Map<String,String> getMetadata()
    Description copied from interface: `DomainObject`
    Returns a map containing all the stored metadata associated with this domain object. The map contains key,value pairs and are ordered by their insertion order.
    Specified by:
      `getMetadata` in interface `DomainObject`
    Overrides:
      `getMetadata` in class `DomainObjectAdapter`
    Returns:
      a map containing all the stored metadata associated with this domain object.

  - ### updateMetadata

    protected void updateMetadata() throws IOException
    Description copied from class: `DomainObjectAdapterDB`
    This method is called before a save, saveAs, or saveToPackedFile to update common meta data
    Overrides:
      `updateMetadata` in class `DomainObjectAdapterDB`
    Throws:
      `IOException`

  - ### lock

    public boolean lock(String reason)
    Description copied from interface: `DomainObject`
    Attempt to obtain a modification lock on the domain object. Multiple locks may be granted on this domain object, although all lock owners must release their lock in a timely fashion.
    Specified by:
      `lock` in interface `DomainObject`
    Overrides:
      `lock` in class `DomainObjectAdapterDB`
    Parameters:
      `reason` - very short reason for requesting lock
    Returns:
      true if lock obtained successfully, else false which indicates that a modification is in process.

  - ### forceLock

    public void forceLock(boolean rollback, String reason)
    Description copied from interface: `DomainObject`
    Force transaction lock and terminate current transaction.
    Specified by:
      `forceLock` in interface `DomainObject`
    Overrides:
      `forceLock` in class `DomainObjectAdapterDB`
    Parameters:
      `rollback` - true if rollback of non-commited changes should occurs, false if commit should be done. NOTE: it can be potentially detrimental to commit an incomplete transaction which should be avoided.
      `reason` - very short reason for requesting lock

  - ### unlock

    public void unlock()
    Description copied from interface: `DomainObject`
    Release a modification lock previously granted with the lock method.
    Specified by:
      `unlock` in interface `DomainObject`
    Overrides:
      `unlock` in class `DomainObjectAdapterDB`

  - ### getUniqueProgramID

    public long getUniqueProgramID()
    Description copied from interface: `Program`
    Returns an ID that is unique for this program. This provides an easy way to store references to a program across client persistence.
    Specified by:
      `getUniqueProgramID` in interface `Program`
    Returns:
      unique program ID

  - ### invalidateWriteCache

    public void invalidateWriteCache()
    Description copied from class: `DomainObjectAdapterDB`
    Invalidate (i.e., clear) any pending database changes not yet written. This method will be invoked by the transaction manager prior to aborting a transaction.
    Overrides:
      `invalidateWriteCache` in class `DomainObjectAdapterDB`

  - ### flushWriteCache

    public void flushWriteCache()
    Description copied from class: `DomainObjectAdapterDB`
    Flush any pending database changes. This method will be invoked by the transaction manager prior to closing a transaction.
    Overrides:
      `flushWriteCache` in class `DomainObjectAdapterDB`

  - ### installExtensions

    protected void installExtensions()
    Install updated compiler spec extension options. See `SpecExtension`.

  - ### domainObjectRestored

    protected void domainObjectRestored()
    Description copied from class: `DomainObjectAdapterDB`
    Indicates that this domain object has been restored to a completely different state due to a transaction undo/redo/rollback or a database merge operation.
    Overrides:
      `domainObjectRestored` in class `DomainObjectAdapterDB`