1JRD(1) java-runtime-decompiler JRD(1)
2
3
4
6 JRD - Java Runtime Decompiler
7
9 (./start.sh|start.bat) [-verbose] # launches GUI
10
11 (./start.sh|start.bat) [-verbose] (-help|-h|-overwrite|-init)
12
13 (./start.sh|start.bat) [-verbose] (-listclasses|-listde‐
14 tails|-bytes|-base64bytes|-compile|-decompile|-api|-listjvms|-listplug‐
15 ins) [-saveas [-savelike]]
16
18 Standard options
19 -help, -h
20 Print this help text.
21
22 -verbose
23 All exceptions and some debugging strings will be printed to
24 standard error.
25
26 -version
27 Print version project name, version and build timestamp.
28
29 -listjvms
30 List all local Java processes and their PIDs.
31
32 -listplugins
33 List all currently configured decompiler plugins and their sta‐
34 tuses.
35
36 -listclasses <PUC> [<CLASS REGEX>...]
37 List all loaded classes of a process, optionally filtering
38 them.
39
40 Only '-savelike exact' or '-savelike default' are allowed as
41 saving modifiers.
42
43 -listdetails <PUC> [<CLASS REGEX>...]
44 Similar to -listclasses, only more details are printed about
45 classes.
46
47 -base64bytes <PUC> <CLASS REGEX>...
48 Print Base64 encoded binary form of requested classes of a
49 process.
50
51 -bytes <PUC> <CLASS REGEX>...
52 Print binary form of requested classes of a process
53
54 -compile [-p <PLUGIN>] [-cp <PUC>] [-r] <PATH>...
55 Compile local files against runtime classpath, specified by
56 -cp.
57
58 Use -p to utilize some plugins' (like jasm or jcoder) bundled
59 compilers.
60
61 Use -r for recursive search if <PATH> is a directory.
62
63 If the argument of '-saveas' is a valid PID or URL, the com‐
64 piled code will be attempted to be injected into that process.
65
66 If multiple PATHs were specified, but no '-saveas', the process
67 fails.
68
69 -decompile <PUC> <PLUGIN> <CLASS REGEX>...
70 Decompile and print classes of a process with the specified de‐
71 compiler plugin.
72
73 Javap can be passed options by appending them without spaces:
74 'javap-v-public ...' executes as 'javap -v -public ...'
75
76 -overwrite <PUC> <FQN> [<CLASS FILE>]
77 Overwrite class of a process with new bytecode. If <CLASS FILE>
78 is not set, standard input is used.
79
80 -init <PUC> <FQN>
81 Try to initialize a class in a running JVM (has no effect in FS
82 VMs). Because class loading is lazy, the class you need might be
83 missing, eg. java.lang.Override.
84
85 -api <PUC>
86 Will print out which can be used to insert fields/methods to
87 running vm
88
89 Saving modifiers
90 -saveas <PATH>
91 All outputs will be written to PATH instead of to standard out‐
92 put.
93
94 -savelike <SAVE METHOD>
95 Specify how saving will behave.
96
98 All options can be with either one or two leading slashes ('-').
99
100
101 When using <CLASS REGEX>, escape dollar signs '$' of inner classes to
102 '\$'; otherwise they mean the end-of-line.
103
104
105 <FQN> is the fully qualified name of a class as per the Java Language
106 Specification ?6.7.
107
108
109 <PUC>, short for PidUrlClasspath, can be one of:
110
111 • local process PID
112
113 • remote process URL, in the format of 'hostname:port'
114
115 • classpath of JAR on the filesystem (classpath separator is
116 ':')
117
118
119 <SAVE METHOD> can be one of:
120
121 • 'dir' - Result will be saved as '<PATH>/fully/quali‐
122 fied/name.class'. Default for .class binaries.
123
124 • 'fqn' - Result will be saved as '<PATH>/fully.quali‐
125 fied.name.java'. Default for .java sources.
126
127 • 'exact' - Result will be saved exactly to '<PATH>'. Default
128 for everything else.
129
130 • 'default' - Saving uses the defaults mentioned above.
131
132
133
134
135 2022-07-21T15:15:42Z JRD(1)