¿Hay una utilidad similar a OllyDbg/SoftICE para java? Es decir. ejecutar clase (desde jar/con class path) y, sin código fuente, mostrar el desmontaje del código intermedio con la capacidad de paso/paso/buscar referencias/editar código intermedio específico en la memoria/aplicar edición al archivo ...¿Hay un desensamblador + depurador para java (ala OllyDbg/SoftICE para ensamblador)?
De lo contrario, ¿es posible escribir algo como esto (suponiendo que estamos dispuestos a vivir sin el punto de acceso durante la duración de la depuración)?
Editar: No estoy hablando de JAD o JD o Cavaj. Estos son buenos decompiladores, pero no quiero un decompilador por varias razones, lo más notable es que su salida es incorrecta (en el mejor de los casos, a veces simplemente incorrecta). No estoy buscando un mágico "bytes compilados para código Java" - Quiero ver los bytes reales que están a punto de ejecutarse. Además, me gustaría poder cambiar esos bytes (como en un depurador de ensamblaje) y, con suerte, volver a escribir la parte modificada en el archivo de clase.
Edit2: Sé que existe javap, pero lo hace de una sola manera (y sin ningún tipo de análisis). Ejemplo (código tomado de la documentación vmspec): Desde el código de Java, utilizamos "javac" para compilar esto:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
a un archivo .class de Java. Usando javap -c puedo conseguir este resultado:
Method void setIt(int)
0 aload_0
1 iload_1
2 putfield #4
5 return
Method int getIt()
0 aload_0
1 getfield #4
4 ireturn
Esto está bien para la parte desmontaje (no muy bueno sin análisis - "campo # 4 es Example.i"), pero no puedo encontrar a los dos otras "herramientas":
- Un depurador que repasa las instrucciones en sí (con pila, volcados de memoria, etc.), lo que me permite examinar el código y el entorno real.
- Una forma de revertir el proceso: edite el código desensamblado y vuelva a crear el archivo .class (con el código editado).
Wow, gran respuesta. Lástima que no hay tal herramienta. Dudo que construya uno yo mismo (muy interesante, pero la presión en el trabajo, la vida, el conocimiento del dominio no es suficiente ...). Gracias por la respuesta muy completa. –
+1 ¡toda esta información me ayudó mucho! =) Gracias – jyz