public interface

IUnitIdentifier

implements IUnitPlugin
com.pnfsoftware.jeb.core.units.IUnitIdentifier
Known Indirect Subclasses

Class Overview

Unit identifiers are one of the two types of plugins supported by JEB engines. They are used to determine if some input data can be processed by a corresponding unit. Unit plugins must have a public no-argument constructor. Currently, unit plugins cannot be unloaded (and therefore, unlike IEnginesPlugin, do not offer a dispose() method).

Identifiers have a unique type identification string (eg, "dex") and a priority. For identifiers that successfully identify the same input data as processable, the tie can be broken by using the priority value.

Identifiers build (or rebuild) units and provide them to clients.

Identifiers are rarely used on their own. They are generally managed by a IUnitProcessor.

Summary

Constants
String KEY_FAILURE_REASON
Public Methods
abstract boolean acceptAnyInputBytes()
Indicate that this identifier could return true for any input.
abstract boolean canIdentify(IInput input, IUnitCreator parent)
Legacy method that does not provide name and identmap.
abstract boolean canIdentify(IInput input, IUnitCreator parent, String name, Map<Object, Object> identmap)
Perform input identification.
abstract IUnit prepare(String name, IInput input, IUnitProcessor unitProcessor, IUnitCreator parent)
Legacy method that does not provide identmap.
abstract IUnit 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.
[Expand]
Inherited Methods
From interface com.pnfsoftware.jeb.core.IPlugin
From interface com.pnfsoftware.jeb.core.units.IUnitPlugin

Constants

public static final String KEY_FAILURE_REASON

Constant Value: "FAILURE_REASON"

Public Methods

public abstract boolean acceptAnyInputBytes ()

Indicate that this identifier could return true for any input. The input data does not follow a specific format.

Returns
  • true if the input data may not be readily identified as of a specific format

public abstract boolean canIdentify (IInput input, IUnitCreator parent)

Legacy method that does not provide name and identmap.

public abstract boolean canIdentify (IInput input, IUnitCreator parent, String name, Map<Object, Object> identmap)

Perform input identification. Determine if a corresponding unit may be created out of the provided input.

Parameters
input input data, may be null only if the parent is not null
parent the parent
name optional input name
identmap optional output map filled during identification; on success, that object should be provided to prepare.
List of special keys that may be filled during identification regardless of success/failure:
- "FAILURE_REASON" (type String): upon failure, an optional message (type String) provided by the identifier to the client explaining why identification failed, if the reason is potentially interesting to the client
Returns
  • true if the identification succeeded, false otherwise. Users will want to call prepare() upon successful identification, although identification may be bypassed

public abstract IUnit prepare (String name, IInput input, IUnitProcessor unitProcessor, IUnitCreator parent)

Legacy method that does not provide identmap.

public abstract IUnit 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. Typically, it is called by unit processors when input data has been identified by the unit identifier as a potential candidate for the corresponding unit.

Unit preparation may involve processing the unit. Starting with JEB 2.2, we recommend that unit processing be left at the discretion of client code. Lazy processing may avoid incurring unnecessary or untimely computational overheads.

Parameters
name the unit name
input the input binary data for that unit
unitProcessor the processor
parent the parent
identmap optional identification map filled out by canIdentify(IInput, IUnitCreator, String, Map)
Returns
  • a fresh unit that can process `data`