Tengo un archivo jar de terceros que viene con los javadocs para sólo una parte de la API. ¿Hay alguna manera de realizar una ingeniería inversa del archivo jar para obtener una lista completa de clases y métodos?¿Cómo obtener las firmas de métodos de un archivo jar?
Respuesta
jar tf
enumerará los contenidos para usted. javap
le permitirá ver más detalles de las clases (consulte la guía de herramientas).
Por ejemplo, si usted tiene una clase llamada mypkg.HelloWorld
en un frasco myjar.jar
luego ejecutarlo como
javap -classpath myjar.jar mypkg.HelloWorld
Sin embargo, está seguro de que quiere ser el uso de estas API no publicados? Por lo general, es una muy mala idea.
Si está utilizando eclipse, puede simplemente agregarlo a la ruta de clase de un proyecto y explorarlo utilizando la vista de árbol y/o la asistencia de contenido.
Me asumir otros IDE pueden hacer similares.
Desde un punto de vista de línea de comandos, puede desvincularlo (jar xf foo.jar) y usar javap contra todos los archivos.
Como dijo Scott, puedes usar Eclipse para obtener mucho de lo que estás buscando.
Recomendaría obtener el JadClipse plugin que descompilará los archivos .class sobre la marcha y le mostrará el código real de Java mientras navega por las clases en el IDE.
De acuerdo. Una combinación muy poderosa –
Eclipse sería un gran trabajo
Un Java Decompiler se traduciría las clases de nuevo en algunos semblence de código fuente que se puede estudiar para aprender acerca de las clases, los métodos, sus firmas, y tal vez incluso una cierta penetración en valores válidos para algunos argumentos (por ejemplo, no deje pasar un nulo para este argumento o te activa una NullPointerException inmediatamente). Pero enrolle sus mangas para deshacer el tarro y ejecutar el descompilador contra todos los archivos de clase. Esto es esencialmente lo que Eclipse está haciendo para obtener texto de ayuda con clases no documentadas.
Finalmente, por supuesto, un "real programmer" leería el byte-code directamente sin necesidad de descompilador.
una ayuda rápida para conocer los métodos de una clase normal (clase no abstracta), hago lo siguiente.
new classname(). Presione ctrl + espacio para la lista de métodos en eclipse.
Utilice Eclipse> Package Explorer para ver las clases y su jerarquía.
ayuda de contenido (función de autocompletar (Ctrl + espacio)) es también una buena ayuda, pero no me recomendar el uso de una API no publicada
Puede utilizar la biblioteca WALA dar lectura a todas las firmas de métodos. Sin embargo, primero deberá cargar Stub-Code for Java. El siguiente programa debe leer todas las firmas:
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.types.ClassLoaderReference;
import java.util.jar.JarFile;
import java.io.IOException;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
public class methods {
public static void main(String[] args) throws IOException, ClassHierarchyException {
AnalysisScope scope = AnalysisScope.createJavaAnalysisScope();
scope.addToScope(ClassLoaderReference.Primordial, new JarFile("jSDG-stubs-jre1.5.jar"));
scope.addToScope(ClassLoaderReference.Application, new JarFile("myProgram.jar"));
IClassHierarchy cha = ClassHierarchy.make(scope);
for (IClass cl : cha) {
if (cl.getClassLoader().getReference().equals(ClassLoaderReference.Application)) {
for (IMethod m : cl.getAllMethods()) {
String ac = "";
if (m.isAbstract()) ac = ac + "abstract ";
if (m.isClinit()) ac = ac + "clinit ";
if (m.isFinal()) ac = ac + "final ";
if (m.isInit()) ac = ac + "init ";
if (m.isNative()) ac = ac + "native ";
if (m.isPrivate()) ac = ac + "private ";
if (m.isProtected()) ac = ac + "protected ";
if (m.isPublic()) ac = ac + "public ";
if (m.isSynchronized()) ac = ac + "synchronized ";
System.out.println(ac + m.getSignature());
}
}
}
}
}
Si utiliza la versión WALA-adaptado de here lo hace Dalvik (por ejemplo,Aplicaciones de Android) también.
- 1. C#: ¿Firmas de métodos?
- 2. Maven verificar las firmas de pom descargado/archivos jar
- 3. Cambiar las firmas de métodos abstractos en las clases heredadas
- 4. Herramienta para buscar incompatabilities en las firmas/campos de métodos
- 5. Cómo obtener javadoc de primavera en un archivo jar/zip
- 6. obtener el archivo JAR desde
- 7. Obtención de codificaciones de tipo para las firmas de métodos en Cocoa/Objective-C?
- 8. Cómo ejecutar un archivo JAR
- 9. Java: ¿Manera fácil de obtener trozos de métodos de archivos de clase dentro de un archivo JAR? ¿Reflexión?
- 10. Modificación de un archivo jar
- 11. ¿Cómo usar las firmas en un informe de error?
- 12. ¿Cómo verificar la existencia de un archivo JAR y un archivo específico dentro de JAR?
- 13. ¿Cómo leer un archivo de un archivo jar?
- 14. Cómo cargar un recurso de un archivo JAR incrustado
- 15. Extensión de Python C: firmas de métodos para la documentación?
- 16. Leyendo un archivo zip dentro de un archivo jar
- 17. ¿Cómo imprimo las estructuras de clase en un archivo jar utilizando la herramienta javap?
- 18. Clases de listado en un archivo jar
- 19. Obtener tiempo de compilación JAR
- 20. ¿Cómo puedo convertir un archivo JAR en un archivo EXE?
- 21. buscando analizador de código C++ para ver todas las firmas
- 22. ¿Por qué Powershell agrega parámetros adicionales a las Firmas de métodos de servicios web?
- 23. Modificar un archivo dentro de un jar
- 24. ¿Cómo firmas un Java Midlet?
- 25. Cómo proteger un archivo Jar de la descompilación?
- 26. ¿Cómo modifico un archivo en un archivo jar usando ANT?
- 27. ¿Cómo leo un archivo de recursos de un archivo jar de Java?
- 28. Cómo firmar un archivo JAR utilizando un archivo .PFX
- 29. ¿Cómo crear un archivo jar encriptado?
- 30. Cómo crear un archivo Jar en Netbeans
Al igual que con la reflexión? –