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 IProgressCallbackprotected IDecompilerUnitprotected booleanprotected Stringprotected static final ILoggerprotected longprotected Fileprotected Patternprotected longprotected booleanprotected AtomicIntegerprotected AtomicInteger -
Constructor Summary
ConstructorsConstructorDescriptionDecompilerExporter(IDecompilerUnit decompiler) Create an exporter with default settings. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidcustomizeOptions(boolean decompilingClasses, DecompilationOptions.Builder optbld) Optional method used to customize the options of the decompilation context.final booleanexport()A synonym forprocess().protected StringgenerateClassFileName(String address) protected StringgenerateMethodFileName(String address) Retrieve a map "address -> error string" for all methods that failed the decompilation.Retrieve the number of generated source files.longlongbooleanabstract booleanprocess()Decompile and export all meaningful elements.booleanDecompile and export all internal methods.booleanDecompile and export all top-level classes (i.e., non member classes).protected voidreset()voidsetCallback(IProgressCallback callback) Set an optional callback to receive progress information on the decompilation.voidsetDiscardDecompiledItemsAfterProcessing(boolean discardDecompiledItemsAfterProcessing) Specify whether decompiled items should be kept or discarded after the decompilation process is complete.voidSet an optional single-line header string, prepended to all decompiled classes.voidsetMethodTimeout(long methodTimeoutMs) Set an optional timeout for method decompilation.voidsetOutputFolder(File folder) voidsetOutputFolder(File folder, Boolean discardDecompiledItemsAfterProcessing) Set an optional output folder.voidsetSignaturePattern(Pattern pattern) Set an optional matcher for classes or methods to be decompiled.voidsetTotalTimeout(long totalTimeoutMs) Set an optional timeout for the entire decompilation process.protected voidprotected 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:
-