top-level public class to be defined per *.java source file and requires that the bytecode
be stored in a file with whose name matches the pattern TopLevelClassName.class.
Java Virtual Machine (JVM)
Figure 5.1. Execution of Java bytecode versus machine code.
5.1 Decompiling and Disassembling Java Bytecode
To demonstrate how much more feasible it is to recover Java source code from
Java bytecode than it is to recover C/C++ code from machine code, we decompile the
bytecode for the program ListArguments.java using Jad, a Java decompiler which can be
found here ; we then compare the generated Java source with the original. Before
performing the decompilation we peek at the bytecode using javap to get an idea of how
much information survives the translation from high-level Java source to the intermediate
format of Java bytecode. Table 5.1 contains the source code for ListArguments.java, a
simple Java program that echoes each argument passed on the command-line to standard