Class DecompilerExporter
java.lang.Object
com.pnfsoftware.jeb.core.units.code.DecompilerExporter
- Direct Known Subclasses:
DexDecompilerExporter
,NativeDecompilerExporter
Helper class used to decompile and export to source files all or a subset of classes or methods
of a code unit.
Example: export all top-level items to an output folder:
IDecompilerUnit decomp = ...; // retrieved from the current IRuntimeProject File outdir = ...; DecompilerExporter exp = decomp.getExporter(); exp.setOutputFolder(outdir, false); exp.setMethodTimeout(60_000L); // safety exp.setTotalTimeout(15 * 60_000L); // safety exp.setCallback(new ProgressCallbackAdapter() { @Override public void message(String msg) { System.out.println(msg); } }); boolean success = exp.process(); System.out.println("Errors: " + exp.getErrors());
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected IProgressCallback
protected IDecompilerUnit
protected boolean
protected String
protected static final ILogger
protected long
protected File
protected Pattern
protected long
protected boolean
protected AtomicInteger
protected AtomicInteger
-
Constructor Summary
ConstructorsConstructorDescriptionDecompilerExporter
(IDecompilerUnit decompiler) Create an exporter with default settings. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
customizeOptions
(boolean decompilingClasses, DecompilationOptions.Builder optbld) Optional method used to customize the options of the decompilation context.final boolean
export()
A synonym forprocess()
.protected String
generateClassFileName
(String address) protected String
generateMethodFileName
(String address) Retrieve a map "address -> error string" for all methods that failed the decompilation.Retrieve the number of generated source files.long
long
boolean
abstract boolean
process()
Decompile and export all meaningful elements.boolean
Decompile and export all internal methods.boolean
Decompile and export all top-level classes (i.e., non member classes).protected void
reset()
void
setCallback
(IProgressCallback callback) Set an optional callback to receive progress information on the decompilation.void
setDiscardDecompiledItemsAfterProcessing
(boolean discardDecompiledItemsAfterProcessing) Specify whether decompiled items should be kept or discarded after the decompilation process is complete.void
Set an optional single-line header string, prepended to all decompiled classes.void
setMethodTimeout
(long methodTimeoutMs) Set an optional timeout for method decompilation.void
setOutputFolder
(File folder) void
setOutputFolder
(File folder, Boolean discardDecompiledItemsAfterProcessing) Set an optional output folder.void
setSignaturePattern
(Pattern pattern) Set an optional matcher for classes or methods to be decompiled.void
setTotalTimeout
(long totalTimeoutMs) Set an optional timeout for the entire decompilation process.protected void
protected void
-
Field Details
-
logger
-
decomp
-
outputFolder
-
headerString
-
pattern
-
methodTimeoutMs
protected long methodTimeoutMs -
totalTimeoutMs
protected long totalTimeoutMs -
callback
-
discardDecompiledItemsAfterProcessing
protected boolean discardDecompiledItemsAfterProcessing -
usesCustomDecompWriter
protected boolean usesCustomDecompWriter -
writeCount
-
writeErrorCount
-
errormap
-
-
Constructor Details
-
DecompilerExporter
Create an exporter with default settings.- Parameters:
decompiler
- a decompiler
-
-
Method Details
-
reset
protected void reset() -
getDecompiler
-
setOutputFolder
- Throws:
IOException
-
setOutputFolder
public void setOutputFolder(File folder, Boolean discardDecompiledItemsAfterProcessing) throws IOException Set an optional output folder. If the folder exists and contents is already present, it will NOT be removed.- Parameters:
folder
-discardDecompiledItemsAfterProcessing
- optional; if non-null, also updatesetDiscardDecompiledItemsAfterProcessing(boolean)
- Throws:
IOException
- if some error occurred when creating the output folder
-
getOutputFolder
-
setHeaderString
Set an optional single-line header string, prepended to all decompiled classes. The default header string is:Decompiled by JEB v[VERSION]
- Parameters:
s
-
-
getHeaderString
-
setSignaturePattern
Set an optional matcher for classes or methods to be decompiled.- Parameters:
pattern
- a regex pattern
-
getSignaturePattern
-
setMethodTimeout
public void setMethodTimeout(long methodTimeoutMs) Set an optional timeout for method decompilation.- Parameters:
methodTimeoutMs
-
-
getMethodTimeout
public long getMethodTimeout() -
setTotalTimeout
public void setTotalTimeout(long totalTimeoutMs) Set an optional timeout for the entire decompilation process.- Parameters:
totalTimeoutMs
-
-
getTotalTimeout
public long getTotalTimeout() -
setCallback
Set an optional callback to receive progress information on the decompilation.- Parameters:
callback
-
-
getCallback
-
setDiscardDecompiledItemsAfterProcessing
public void setDiscardDecompiledItemsAfterProcessing(boolean discardDecompiledItemsAfterProcessing) Specify whether decompiled items should be kept or discarded after the decompilation process is complete. Unless you are planning to examine decompiled items later, it is recommended to discard them.- Parameters:
discardDecompiledItemsAfterProcessing
-
-
isKeepDecompiledItemsAfterProcessing
public boolean isKeepDecompiledItemsAfterProcessing() -
export
public final boolean export()A synonym forprocess()
. -
process
public abstract boolean process()Decompile and export all meaningful elements. This is the recommended method to call. Top-level classes and their constituents will be exported; orphaned methods and other items will be exported as well.If an output folder was specified, the resulting source files will be stored in a folder hierarchy that matches their namespace or package name.
- Returns:
- true if no error occurred; false if some errors occurred
-
customizeOptions
Optional method used to customize the options of the decompilation context. The custom implementation may modify or set new options. The default implementation does nothing.- Parameters:
decompilingClasses
- true if the exporter will decompile classes; false if it will decompile methodsoptbld
- the current option builder
-
processTopLevelClasses
public boolean processTopLevelClasses()Decompile and export all top-level classes (i.e., non member classes).If an output folder was specified, the resulting source files will be stored in a folder hierarchy that matches their namespace or package name.
- Returns:
- true if no error occurred; false if some errors occurred
-
processMethods
public boolean processMethods()Decompile and export all internal methods. Refer toprocessTopLevelClasses()
to export classes hierarchically.If an output folder was specified, the resulting source files will be stored in that folder. No folder hierarchy is created. File names are uniquely derived from method signatures.
- Returns:
- true if no error occurred; false if some errors occurred
-
generateMethodFileName
-
writeMethodDecompilation
-
generateClassFileName
-
writeClassDecompilation
-
getGeneratedFileCount
Retrieve the number of generated source files.- Returns:
-
getErrors
Retrieve a map "address -> error string" for all methods that failed the decompilation. Call afterprocess()
.- Returns:
-