Cómo descompilar .class desde línea de comandos

Una clase java no puede visualizarse desde línea de comandos como si fuera un archivo de texto, es decir, con comandos como cat,less, more, etc. Para poder ver el contenido de forma legible hay que descompilar previamente la clase:

$ file foo.class
foo.class:      java class file

Tanto JAVA de Oracle como OpenJDK cuentan con una herramienta llamada «javap» que permite descompilar una o varias classes:

DESCRIPTION

The javap command disassembles one or more class files. Its output depends on the options used. If no options are used, javap prints out the package, protected, and public fields and methods of the classes passed to it. javap prints its output to stdout.

Por ejemplo, para descompilar la clase «foo» que veíamos anteriormente podemos hacerlo del siguiente modo. Primero especificamos la ruta en la que se encuentra la clase y después el nombre:

$ javap -classpath . -c foo

Hay otros parámetros disponibles como por ejemplo mostrar los números de línea, información protegida, tablas de variables locales, información de sistema, etc:

$ javap -help
Usage: javap 
where possible options include:
  -help  --help  -?        Print this usage message
  -version                 Version information
  -v  -verbose             Print additional information
  -l                       Print line number and local variable tables
  -public                  Show only public classes and members
  -protected               Show protected/public classes and members
  -package                 Show package/protected/public classes
                           and members (default)
  -p  -private             Show all classes and members
  -c                       Disassemble the code
  -s                       Print internal type signatures
  -sysinfo                 Show system info (path, size, date, MD5 hash)
                           of class being processed
  -constants               Show static final constants
  -classpath         Specify where to find user class files
  -bootclasspath     Override location of bootstrap class files

5 comentarios en “Cómo descompilar .class desde línea de comandos

Comments are closed.