Uses of Interface
com.pnfsoftware.jeb.core.units.IUnit
Packages that use IUnit
Package
Description
This package and its sub-packages contain types and interfaces used to build JEB clients and interact with client-specific sides of a JEB instance.
Types used by scripts to interact with the analysis results presented by a JEB client.
The core package and sub-packages define classes and interfaces to interact with and
develop JEB back-end plugins.
Custom exceptions generated by the back-end.
Types to build unit-generated contents in the form of text, table, or tree documents.
Trivial implementations for the text package interfaces.
Types used to implement and access data identifiers, parsers, code analyzers, disassemblers,
decompilers, and debuggers.
Types related to JEB code plugins, including disassemblers, decompilers, and debuggers.
This package and sub-packages contain all types used by Android code analysis plugins.
This package and sub-packages contains types used by the native code analysis pipeline, including
gendec (the generic decompiler).This package and its sub-packages contain the types used to access
gendec, JEB's generic
decompiler.C AST types, used in AST documents provided by the
source units
generated by gendec.Types used by Dart code analysis plugins.
Types used by debugger plugins.
Types used to manipulate
dexdec-generated (Dex decompiler) Java Abstract Syntax Tree
(AST) objects.Public types and interfaces provided by the Simatic S7 analysis plugins.
Types specific to code objects, such as Windows PE, Linux ELF, or Apple Mach-O.
Standard implementations of basic units objects.
Utility types specific to JEB core, such as unit helper classes.
-
Uses of IUnit in com.pnfsoftware.jeb.client
Methods in com.pnfsoftware.jeb.client that return IUnit -
Uses of IUnit in com.pnfsoftware.jeb.client.api
Methods in com.pnfsoftware.jeb.client.api that return IUnitModifier and TypeMethodDescriptiondefault IUnitIGraphicalClientContext.getFocusedUnit()Get the IUnit object represented by the currently focused fragment.IUnitFragment.getUnit()Get the unit visualized by this fragment.IUnitView.getUnit()Get the unit represented by this view.UnitFragmentPosition.getUnit()Convenience method used to create a JEB project (or retrieve the current project if one is opened), load a file artifact into the project, process it, and return the resulting top-level unit.Methods in com.pnfsoftware.jeb.client.api with parameters of type IUnitModifier and TypeMethodDescriptionIGraphicalClientContext.findFragment(IUnit unit, String label, boolean focus) Find and activate a view fragment for the provided unit with the provided name.Get the list of views representing the given unit within the UI client.booleanConvenience method used to find and open a unit fragment, and navigate to an optionally-provided address within that fragment.booleanCreate or open the view or set of views representing a given unit.Constructors in com.pnfsoftware.jeb.client.api with parameters of type IUnitModifierConstructorDescriptionUnitFragmentPosition(IUnit unit, IUnitFragment fragment, IGenericDocument doc, String address, IItem item) -
Uses of IUnit in com.pnfsoftware.jeb.core
Methods in com.pnfsoftware.jeb.core with type parameters of type IUnitModifier and TypeMethodDescriptionstatic <T extends IUnit>
TRuntimeProjectUtil.findFirstUnitByType(IRuntimeProject prj, Class<T> c, boolean strict) Find a units of a project that are of the specified type.<T extends IUnit>
TConvenience method used to retrieve a unit of the project by its class type.Convenience method used to retrieve units of the project by their class type.RuntimeProjectUtil.findUnits(IRuntimeProject prj, Class<T> c) Find all units of a project that are of the specified type.RuntimeProjectUtil.findUnitsByType(IRuntimeProject prj, Class<T> c, boolean strict) Find all units of a project that are of the specified type.Methods in com.pnfsoftware.jeb.core that return IUnitModifier and TypeMethodDescriptionstatic IUnitRuntimeProjectUtil.findUnitByUid(IRuntimeProject prj, long uid) ILiveArtifact.getMainUnit()Convenience method to retrieve the primary (first) unit resulting from the analysis of this artifact.IDynamicTargetPlugin.getPrimaryTarget()Retrieve the primary target for this plugin.BookmarkManager.Bookmark.getUnit()Methods in com.pnfsoftware.jeb.core that return types with arguments of type IUnitModifier and TypeMethodDescriptionRuntimeProjectUtil.filterUnits(IRuntimeProject prj, IUnitFilter filter) Find the units in the project that pass a test provided by the user-defined filter object.RuntimeProjectUtil.getAllUnits(IRuntimeProject prj) Retrieve a list of all units in the provided project.ILiveArtifact.getUnits()Get the units that resulted from the analysis of the artifact within a given project.Methods in com.pnfsoftware.jeb.core with parameters of type IUnitModifier and TypeMethodDescriptiondefault booleanDetermine if the given unit passed the check.Implementors may choose to implementIUnitFilter.check2(IUnit)instead, which offers more control on the filtering process.default intDetermine if the given unit passed the check.booleanIRuntimeProject.destroyUnit(IUnit unit) This method is used to destroy a unit living in this project.static List<IUnitContribution>RuntimeProjectUtil.findUnitContributions(IRuntimeProject prj, IUnit target) Retrieve a list of contributions (defined within a given project) for a target unit.Retrieve a bookmark.booleanDetermine if a provided unit is an intended target for this plugin.static voidJebCoreService.notifyExceptionToClient(Throwable throwable, int flags, Map<String, Object> extradata, IUnit unit) Convenience method to "forward" (via an event) a throwable to the client for processing.static voidJebCoreService.notifySilentExceptionToClient(Throwable throwable, IUnit unit) booleanbooleanvoidAdd or update a bookmark.voidBookmarkManager.set(IUnit unit, String address, String description, boolean doNotGenerateMetaComments) Add or update a bookmark.voidIDynamicTargetPlugin.setPrimaryTarget(IUnit unit) Set the primary target for this plugin.Constructors in com.pnfsoftware.jeb.core with parameters of type IUnit -
Uses of IUnit in com.pnfsoftware.jeb.core.exceptions
Methods in com.pnfsoftware.jeb.core.exceptions that return IUnitMethods in com.pnfsoftware.jeb.core.exceptions with parameters of type IUnitModifier and TypeMethodDescriptionvoidvoid -
Uses of IUnit in com.pnfsoftware.jeb.core.output
Methods in com.pnfsoftware.jeb.core.output that return IUnit -
Uses of IUnit in com.pnfsoftware.jeb.core.output.text.impl
Methods in com.pnfsoftware.jeb.core.output.text.impl that return IUnitConstructors in com.pnfsoftware.jeb.core.output.text.impl with parameters of type IUnitModifierConstructorDescriptionHexDumpDocument(IInput input, IUnit unit) Create a new hexdump document to represent the input binary data. -
Uses of IUnit in com.pnfsoftware.jeb.core.units
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.unitsModifier and TypeInterfaceDescriptioninterfaceAddressable units allow the retrieval of unit objects via object identifiers and addresses.interfaceRepresent an archive Unit (zip, jar, tar, apk ...).interfaceMethods in this interface are specific to units that take binary data (bytes) as input.interfaceUnit type representing cryptography certificates such as X509.interfaceRepresent anIUnitwithout processing, because there is somewhere a duplicate unit (exactly the same) in the current project.interfaceInteractive units are addressable units that offer clients the ability to execute actions on their contents.interfaceRepresent a Json UnitinterfaceINativeCodeUnit<InsnType extends IInstruction>Specialized code unit that manages a native code processor and uses a virtual memory.interfaceUnits providing XML documents are encouraged to implement this interface.Classes in com.pnfsoftware.jeb.core.units that implement IUnitModifier and TypeClassDescriptionclassThis extension class provides basic implementations for methods specific to binary units.classSkeleton of an interactive binary unit.classSkeleton of an interactive unit.classSkeleton implementation for anIUnit.classThe fallback unit created if all parsers have failed at identifying some input data.Methods in com.pnfsoftware.jeb.core.units with type parameters of type IUnitModifier and TypeMethodDescriptionstatic <T extends IUnit>
Tstatic <T extends IUnit>
TUnitUtil.findChildByType(IUnit base, Class<T> classtype, boolean exactClasstype, int index) UnitUtil.findChildren(IUnit base, String name, Class<T> c, boolean strict) UnitUtil.findChildrenByType(IUnit base, Class<T> classtype, boolean exactClasstype) UnitUtil.findDescendants(ILiveArtifact base, int level, String name, Class<T> c, boolean strict) UnitUtil.findDescendants(IUnit base, int maxDepth, String name, Class<T> classtype, boolean exactClasstype) Convenience function to find descendant units by type and/or name.UnitUtil.findDescendantsByFormatType(IUnit base, int level, String formatType) UnitUtil.findDescendantsByType(IUnit base, int maxDepth, Class<T> classtype, boolean exactClasstype) Retrieve a list of descendant units of the provided unit that are of the provided classtype (exact or derived) and do not exceeded the maximum depth.UnitUtil.findDescendantsByType(IUnit base, Class<T> classtype, boolean exactClasstype) static <T extends IUnit>
TUnitUtil.findFirstChildByType(IUnit base, Class<T> classtype, boolean exactClasstype) Methods in com.pnfsoftware.jeb.core.units that return IUnitModifier and TypeMethodDescriptionstatic IUnitUnitUtil.findChildByFormatType(IUnit base, String formatType, int index) static IUnitUnitUtil.findChildByName(IUnit base, String name, int index) static IUnitUnitUtil.findFirstChildByFormatType(IUnit base, String formatType) static IUnitUnitUtil.findFirstChildByName(IUnit base, String name) UnknownBinaryUnit.getKnownUnit()IDuplicatedUnit.getOriginal()The originalIUnitwhich the current is the duplicate.default IUnitIUnitIdentifier.prepare(String name, IInput input, IUnitProcessor unitProcessor, IUnitCreator parent) Legacy method that does not provide identmap.default IUnitIUnitIdentifier.prepare(String name, IInput input, IUnitProcessor unitProcessor, IUnitCreator parent, Map<Object, Object> identmap) This method is used to produce a unit of the corresponding identifier type.IUnitProcessor.process(String name, IInput input, IUnitCreator parent) Identify and process input data.IUnitProcessor.process(String name, IInput input, IUnitCreator parent, String wantedType) Identify and process input data.IUnitProcessor.process(String name, IInput input, IUnitCreator parent, String wantedType, boolean softDelegation) Identify and process input data.IUnitProcessor.process(String name, IInput input, IUnitCreator parent, String wantedType, boolean softDelegation, boolean doNotProcessUnit) Identify and process input data.IUnitProcessor.process(String name, IUnitCreator parent) Identify and process input data.static IUnitRetrieve a unit rooted in the provided base, and whose relative path from that base consists of the provided path elements.static IUnitUnitUtil.retrieveProcessed(boolean processIfUnprocessed, IUnit base, String... pathElements) Retrieve a unit rooted in the provided base, and whose relative path from that base consists of the provided path elements.Methods in com.pnfsoftware.jeb.core.units that return types with arguments of type IUnitModifier and TypeMethodDescriptionUnitUtil.filterDescendants(IUnit base, int maxDepth, IUnitFilter filter) Retrieve a list of descendants of the provided unit that pass the provided filter test and do not exceeded the maximum depth.UnitUtil.findChildrenByFormatType(IUnit base, String formatType) UnitUtil.findChildrenByName(IUnit base, String name) UnitUtil.findDescendantsByFormatType(IUnit base, String formatType) UnitUtil.findDescendantsByName(IUnit base, int maxDepth, String name) Retrieve a list of descendant units of the provided unit that have the provided name.UnitUtil.findDescendantsByName(IUnit base, String name) AbstractUnit.getChildren()Sub-classes overriding this method must override related methods consistently.IUnit.getChildren()Retrieve a read-only list of all direct children units.UnitUtil.getUnitsFromPathList(IRuntimeProject prj, List<String> path) Retrieve the targetsIUnitfrom its path (built fromUnitUtil.buildFullyQualifiedUnitPathList(IUnitCreator, boolean)for example).Methods in com.pnfsoftware.jeb.core.units with parameters of type IUnitModifier and TypeMethodDescriptionvoidSub-classes overriding this method must override related methods consistently.voidSub-classes overriding this method must override related methods consistently.protected voidvoidRegister a child unit to this unit.voidAdd a child unit to this unit.static StringUnitUtil.buildFullyQualifiedUnitPath(IUnit unit) Build a unit path of the artifact name and its parent units, such as:artifact > unit > unit > ...static StringUnitUtil.buildFullyQualifiedUnitPath(IUnit unit, boolean includeArtifact, String separator) Build a fully-qualified unit path.IUnitProcessor.createDebugger(String name, IUnit parent) Convenience method that processes a code unit to produce an associated debugger unit.IUnitProcessor.createDecompiler(String name, IUnit parent) Convenience method that processes a code unit to produce an associated decompiler unit.UnitUtil.filterDescendants(IUnit base, int maxDepth, IUnitFilter filter) Retrieve a list of descendants of the provided unit that pass the provided filter test and do not exceeded the maximum depth.static <T extends IUnitCreator>
TUnitUtil.findAncestor(IUnit unit, Class<T> c, boolean strict) static <T extends IUnit>
Tstatic IUnitUnitUtil.findChildByFormatType(IUnit base, String formatType, int index) static IUnitUnitUtil.findChildByName(IUnit base, String name, int index) static <T extends IUnit>
TUnitUtil.findChildByType(IUnit base, Class<T> classtype, boolean exactClasstype, int index) UnitUtil.findChildren(IUnit base, String name, Class<T> c, boolean strict) UnitUtil.findChildrenByFormatType(IUnit base, String formatType) UnitUtil.findChildrenByName(IUnit base, String name) UnitUtil.findChildrenByType(IUnit base, Class<T> classtype, boolean exactClasstype) UnitUtil.findDescendants(IUnit base, int maxDepth, String name, Class<T> classtype, boolean exactClasstype) Convenience function to find descendant units by type and/or name.UnitUtil.findDescendantsByFormatType(IUnit base, int level, String formatType) UnitUtil.findDescendantsByFormatType(IUnit base, String formatType) UnitUtil.findDescendantsByName(IUnit base, int maxDepth, String name) Retrieve a list of descendant units of the provided unit that have the provided name.UnitUtil.findDescendantsByName(IUnit base, String name) UnitUtil.findDescendantsByType(IUnit base, int maxDepth, Class<T> classtype, boolean exactClasstype) Retrieve a list of descendant units of the provided unit that are of the provided classtype (exact or derived) and do not exceeded the maximum depth.UnitUtil.findDescendantsByType(IUnit base, Class<T> classtype, boolean exactClasstype) static IUnitUnitUtil.findFirstChildByFormatType(IUnit base, String formatType) static IUnitUnitUtil.findFirstChildByName(IUnit base, String name) static <T extends IUnit>
TUnitUtil.findFirstChildByType(IUnit base, Class<T> classtype, boolean exactClasstype) static booleanUnitUtil.isAncestorOf(IUnit unit, IUnit expectedAncestor) static booleanUnitUtil.isAncestorOf(IUnit unit, IUnit expectedAncestor, boolean strictAncestor) booleanIQuickStateObject.isTargetUnit(IUnit unit) Determine if a unit is the target unit of this object, ie, if its state can be (partially) restored using this object.static booleanUnitUtil.isTopLevelUnit(IUnit unit) booleanAbstractUnit.isTransientChild(IUnit unit) Sub-classes overriding this method must override related methods consistently.booleanIUnit.isTransientChild(IUnit unit) Check if a child unit is transient.static voidUnitUtil.logError(IUnit unit, String address, boolean recordNotification, ILogger logger, String format, Object... params) Log an error and optionally record a unit notification.static voidUnitUtil.logException(IUnit unit, ILogger logger, Exception e) Log an exception and optionally record a unit notification.static voidLog an internal message.static voidUnitUtil.logInfo(IUnit unit, String address, boolean recordNotification, ILogger logger, String format, Object... params) Log an informational message and optionally record a unit notification.static voidLog a trace message.static voidUnitUtil.logWarn(IUnit unit, String address, boolean recordNotification, ILogger logger, String format, Object... params) Log a warning and optionally record a unit notification.static voidUnitUtil.notifyGenericChange(IUnit unit) Issue a genericJ.UnitChangeevent to all listeners of the provided unit.booleanReload (restore) the state of a unit using this object.final voidAbstractUnit.removeChild(IUnit unit) Sub-classes overriding this method must override related methods consistently.protected voidAbstractUnit.removeChild(IUnit unit, boolean notify) voidIUnit.removeChild(IUnit unit) Remove a direct child of the current unit.static IUnitRetrieve a unit rooted in the provided base, and whose relative path from that base consists of the provided path elements.static IUnitUnitUtil.retrieveProcessed(boolean processIfUnprocessed, IUnit base, String... pathElements) Retrieve a unit rooted in the provided base, and whose relative path from that base consists of the provided path elements.booleanprotected booleanstatic StringUnitUtil.unitProperty(IUnit unit, String propertyName) Generate a fully-qualified property name used by aunit.Constructors in com.pnfsoftware.jeb.core.units with parameters of type IUnitModifierConstructorDescriptionAbstractInteractiveBinaryUnit(String mimeType, IInput input, String formatType, String name, IUnit parent) AbstractInteractiveUnit(String formatType, String name, IUnit parent) AbstractUnit(String formatType, String name, IUnit parent) Build a new child from parentIUnit -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.codeModifier and TypeInterfaceDescriptioninterfaceBase interface for units representing disassembled binary code, such as bytecode, opcodes, object files, executable files, and so on.interfaceGeneric interface for decompilers.interfaceThis interface is used to represent source code abstract syntax trees (AST).Classes in com.pnfsoftware.jeb.core.units.code that implement IUnit -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.android
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.androidModifier and TypeInterfaceDescriptioninterfaceInterface for units representing Android "application packages", aka APK files.interfaceSpecialized interface for Dalvik code debuggers.interfaceSpecialized interface representing Dex (Dalvik) decompiler Units.interfaceInterface for units representing Android Dalvik bytecode containers, aka Dex files.interfaceDefinition of an "extended" APK unit, aka X-APK.Methods in com.pnfsoftware.jeb.core.units.code.android that return IUnitModifier and TypeMethodDescriptionIApkUnit.getAssets()Convenience method to retrieve theAssetsfolder unit (may not exist).IApkUnit.getLibraries()Convenience method to retrieve theLibrariesfolder unit (may not exist).IApkUnit.getResources()Convenience method to retrieve theResourcesfolder unit (may not exist).IJniEndpoint.getUnit()IUnitbound to this endpoint.Methods in com.pnfsoftware.jeb.core.units.code.android with parameters of type IUnitModifier and TypeMethodDescriptionvoidIDexDynamic.registerDynamicJni(String javaMethodSignature, IUnit lib, long jniFunctionPointer) Register a new Dynamic Jni endpoint -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.asm
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.asmModifier and TypeInterfaceDescriptioninterfaceDefinition of native code debuggers. -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.asm.decompiler
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.asm.decompilerModifier and TypeInterfaceDescriptioninterfaceINativeDecompilerUnit<InsnType extends IInstruction>Top-level unit for native decompilers.interfaceA specialized source unit representing the output of a native code decompiler. -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast
Methods in com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast that return IUnit -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.cuda
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.cudaModifier and TypeInterfaceDescriptioninterfaceRepresentation of a Nvidia'sfatbincontainingcubin("CUDA binary") ELF files with SASS binary code or PTX text. -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.dart
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.dartModifier and TypeInterfaceDescriptioninterfaceTop-level interface for JEB units representing parsed Dart AOT binaries. -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.debug
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.debugModifier and TypeInterfaceDescriptioninterfaceMain Application Programming / Service Provider interface for JEB debugger units.Methods in com.pnfsoftware.jeb.core.units.code.debug that return IUnitModifier and TypeMethodDescriptionIDebuggerUnit.getTargetApplication()Retrieve the optional target application. -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.java
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.javaModifier and TypeInterfaceDescriptioninterfaceDefinition of a source unit representing a Java class or Java method in the form of an Abstract Syntax Tree (AST).Methods in com.pnfsoftware.jeb.core.units.code.java that return IUnit -
Uses of IUnit in com.pnfsoftware.jeb.core.units.code.simatic
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.code.simatic -
Uses of IUnit in com.pnfsoftware.jeb.core.units.codeobject
Subinterfaces of IUnit in com.pnfsoftware.jeb.core.units.codeobjectModifier and TypeInterfaceDescriptioninterfaceA common interface for object files that hold machine code such as ELF, PE, or Mach-O.interfaceSpecialized interface for ELF units.interfaceBase interface for PE and COFF units.Classes in com.pnfsoftware.jeb.core.units.codeobject that implement IUnitModifier and TypeClassDescriptionclassConvenient base class for code objects.Methods in com.pnfsoftware.jeb.core.units.codeobject that return IUnitModifier and TypeMethodDescriptionIELFUnit.getImageUnit()Convenience method to retrieve the image held in this ELF container. -
Uses of IUnit in com.pnfsoftware.jeb.core.units.impl
Classes in com.pnfsoftware.jeb.core.units.impl with type parameters of type IUnitModifier and TypeClassDescriptionclassWrapperUnit<T extends IUnit>Simple wrapper (decorator) unit that delegates its job to the providedIUnit.Classes in com.pnfsoftware.jeb.core.units.impl that implement IUnitModifier and TypeClassDescriptionclassSimple wrapper (decorator) forIBinaryUnit.classContainer units are non-binary units used to represent tree structures.classContainer units used to recursively process virtual folders and data blobs.classContainer units used to represent folders and files.classSimple wrapper (decorator) forIInteractiveUnit.classA data container unit that fetches the data of its nodes only when necessary.classWrapperUnit<T extends IUnit>Simple wrapper (decorator) unit that delegates its job to the providedIUnit.Fields in com.pnfsoftware.jeb.core.units.impl with type parameters of type IUnitMethods in com.pnfsoftware.jeb.core.units.impl that return types with arguments of type IUnitMethods in com.pnfsoftware.jeb.core.units.impl with parameters of type IUnitModifier and TypeMethodDescriptionvoidvoidbooleanWrapperUnit.isTransientChild(IUnit unit) static voidDataContainerUnit.register(IUnit caller, Collection<DataContainerUnit.Entry> entries) static voidDataContainerUnit.register(IUnit caller, Collection<DataContainerUnit.Entry> entries, boolean processLeaves) static voidLazyDataContainerUnit.register(IUnit caller, Collection<LazyDataContainerUnit.Entry> entries) voidWrapperUnit.removeChild(IUnit unit) -
Uses of IUnit in com.pnfsoftware.jeb.core.util
Methods in com.pnfsoftware.jeb.core.util with parameters of type IUnitModifier and TypeMethodDescriptionstatic IDebuggerUnitDebuggerHelper.getDebugger(IUnit unit) Retrieve or create a debugger for the provided code unit.static IDebuggerUnitDebuggerHelper.getDebugger(IUnit unit, boolean createIfNotExist) Retrieve a debugger for the provided code unit.static IDecompilerUnitDecompilerHelper.getDecompiler(IUnit unit) Retrieve or create a decompiler for the current unit.static IDecompilerUnitDecompilerHelper.getDecompiler(IUnit unit, boolean createIfNotExist) Retrieve a decompiler for the current unit.static ICodeUnitDecompilerHelper.getRelatedCodeUnit(IUnit unit) Retrieve the existing code unit for the provided decompiler or source unit.static IDecompilerUnitDecompilerHelper.getRelatedDecompiler(IUnit unit) Retrieve an existing decompiler for the current code unit or the decompiler that produced the provided source unit.