Class ProgramDB

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

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

    • CONTENT_TYPE

      public static final String CONTENT_TYPE
      See Also:
    • ANALYSIS_OPTIONS_MOVED_VERSION

      public static final int ANALYSIS_OPTIONS_MOVED_VERSION
      Key version numbers which require special upgrade handling
      See Also:
    • ADDED_VARIABLE_STORAGE_MANAGER_VERSION

      public static final int ADDED_VARIABLE_STORAGE_MANAGER_VERSION
      See Also:
    • METADATA_ADDED_VERSION

      public static final int METADATA_ADDED_VERSION
      See Also:
    • EXTERNAL_FUNCTIONS_ADDED_VERSION

      public static final int EXTERNAL_FUNCTIONS_ADDED_VERSION
      See Also:
    • COMPOUND_VARIABLE_STORAGE_ADDED_VERSION

      public static final int COMPOUND_VARIABLE_STORAGE_ADDED_VERSION
      See Also:
    • AUTO_PARAMETERS_ADDED_VERSION

      public static final int AUTO_PARAMETERS_ADDED_VERSION
      See Also:
    • RELOCATION_STATUS_ADDED_VERSION

      public static final int RELOCATION_STATUS_ADDED_VERSION
      See Also:
  • 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
    • 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:
    • 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 AddressSpaces.
      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 AddressSpaces.
      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

      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 b)
      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