Fernflower readme markdown

master
DMP9 7 years ago committed by GitHub
parent f53a873116
commit 024978848c
  1. 67
      README.md

@ -1,4 +1,4 @@
1. About the decompiler ## About fernflower
Fernflower is the first actually working analytical decompiler for Java and Fernflower is the first actually working analytical decompiler for Java and
probably for a high-level programming language in general. Naturally it is still probably for a high-level programming language in general. Naturally it is still
@ -6,12 +6,11 @@ under development, please send your bug reports and improvement suggestions at
fernflower.decompiler@gmail.com fernflower.decompiler@gmail.com
2. License ## Licence
http://www.apache.org/licenses/LICENSE-2.0 Fernflower is licenced under the Apache Licence Version 2.0. It can be found here: http://www.apache.org/licenses/LICENSE-2.0
## Running from command line
3. Running from the command line
java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination> java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>
@ -24,14 +23,14 @@ java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>
<destination>: destination directory <destination>: destination directory
<option>,<value>: command line option with the corresponding value, see 4. <option>,<value>: command line option with the corresponding value, see 4.
Examples: ### Examples
java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\ java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\
java -jar fernflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\binary\Boot.class c:\Temp\source\ java -jar fernflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\binary\Boot.class c:\Temp\source\
4. Command line options ## Command line options
With the exception of mpm and urc the value of 1 means the option is activated, 0 - deactivated. Default With the exception of mpm and urc the value of 1 means the option is activated, 0 - deactivated. Default
value, if any, is given between parentheses. value, if any, is given between parentheses.
@ -39,39 +38,39 @@ value, if any, is given between parentheses.
Typically, the following options will be changed by user, if any: hes, hdc, dgs, mpm, ren, urc Typically, the following options will be changed by user, if any: hes, hdc, dgs, mpm, ren, urc
The rest of options can be left as they are: they are aimed at professional reverse engineers. The rest of options can be left as they are: they are aimed at professional reverse engineers.
rbr (1): hide bridge methods - rbr (1): hide bridge methods
rsy (0): hide synthetic class members - rsy (0): hide synthetic class members
din (1): decompile inner classes - din (1): decompile inner classes
dc4 (1): collapse 1.4 class references - dc4 (1): collapse 1.4 class references
das (1): decompile assertions - das (1): decompile assertions
hes (1): hide empty super invocation - hes (1): hide empty super invocation
hdc (1): hide empty default constructor - hdc (1): hide empty default constructor
dgs (0): decompile generic signatures - dgs (0): decompile generic signatures
ner (1): assume return not throwing exceptions - ner (1): assume return not throwing exceptions
den (1): decompile enumerations - den (1): decompile enumerations
rgn (1): remove getClass() invocation, when it is part of a qualified new statement - rgn (1): remove getClass() invocation, when it is part of a qualified new statement
lit (0): output numeric literals "as-is" - lit (0): output numeric literals "as-is"
asc (0): encode non-ASCII characters in string and character literals as Unicode escapes - asc (0): encode non-ASCII characters in string and character literals as Unicode escapes
bto (1): interpret int 1 as boolean true (workaround to a compiler bug) - bto (1): interpret int 1 as boolean true (workaround to a compiler bug)
nns (1): allow for not set synthetic attribute (workaround to a compiler bug) - nns (1): allow for not set synthetic attribute (workaround to a compiler bug)
uto (1): consider nameless types as java.lang.Object (workaround to a compiler architecture flaw) - uto (1): consider nameless types as java.lang.Object (workaround to a compiler architecture flaw)
udv (1): reconstruct variable names from debug information, if present - udv (1): reconstruct variable names from debug information, if present
rer (1): remove empty exception ranges - rer (1): remove empty exception ranges
fdi (1): de-inline finally structures - fdi (1): de-inline finally structures
mpm (0): maximum allowed processing time per decompiled method, in seconds. 0 means no upper limit - mpm (0): maximum allowed processing time per decompiled method, in seconds. 0 means no upper limit
ren (0): rename ambiguous (resp. obfuscated) classes and class elements - ren (0): rename ambiguous (resp. obfuscated) classes and class elements
urc : full name of user-supplied class implementing IIdentifierRenamer. It is used to determine which class identifiers - urc : full name of user-supplied class implementing IIdentifierRenamer. It is used to determine which class identifiers
should be renamed and provides new identifier names. For more information see section 5 should be renamed and provides new identifier names. For more information see section 5
inn (1): check for IntelliJ IDEA-specific @NotNull annotation and remove inserted code if found - inn (1): check for IntelliJ IDEA-specific @NotNull annotation and remove inserted code if found
lac (0): decompile lambda expressions to anonymous classes - lac (0): decompile lambda expressions to anonymous classes
nls (0): define new line character to be used for output. 0 - '\r\n' (Windows), 1 - '\n' (Unix), default is OS-dependent - nls (0): define new line character to be used for output. 0 - '\r\n' (Windows), 1 - '\n' (Unix), default is OS-dependent
ind : indentation string (default is " " (3 spaces)) - ind : indentation string (default is " " (3 spaces))
The default logging level is INFO. This value can be overwritten by setting the option 'log' as follows: The default logging level is INFO. This value can be overwritten by setting the option 'log' as follows:
log (INFO): possible values TRACE, INFO, WARN, ERROR log (INFO): possible values TRACE, INFO, WARN, ERROR
5. Renaming identifiers ## Renaming identifiers
Some obfuscators give classes and their member elements short, meaningless and above all ambiguous names. Recompiling of such Some obfuscators give classes and their member elements short, meaningless and above all ambiguous names. Recompiling of such
code leads to a great number of conflicts. Therefore it is advisable to let the decompiler rename elements in its turn, code leads to a great number of conflicts. Therefore it is advisable to let the decompiler rename elements in its turn,
Loading…
Cancel
Save