我有一個第三方jar文件,只有部分API的javadocs。有沒有辦法對jar文件進行逆向工程以獲得完整的類和方法列表?如何從jar文件獲取方法簽名?
回答
如果您使用的是Eclipse,您可以將其添加到項目的類路徑中,並使用樹視圖和/或內容輔助功能來探索它。
我會假設其他IDE可以做類似的。
從命令行的角度來看,你可以取消它(jar xf foo.jar)並對所有文件使用javap。
正如斯科特所說,您可以使用Eclipse獲取許多您正在尋找的內容。
我建議您獲取JadClipse plugin,它將在運行中反編譯.class文件,並在瀏覽IDE中的類時顯示實際的Java代碼。
同意。一個非常強大的組合。 – 2009-06-10 20:53:13
的Eclipse將工作的偉大
一個Java Decompiler將類轉換回源代碼的一些semblence,你可以學習學習類,方法,他們的簽名,並且甚至一些見解轉換爲某些參數的有效值(例如,不要爲此參數傳遞null,否則將立即觸發NullPointerException)。但是捲起你的袖子來解開jar並運行反編譯器來處理所有的類文件。這實際上是Eclipse爲幫助帶有未記錄類的文本所做的。
最後,當然,"real programmer"會直接讀取byte-code而不需要反編譯器。
快速幫助瞭解一個普通類(不是抽象類)的方法,我做以下。
新的classname()。按ctrl +空格列出日曆中的方法。
使用Eclipse> Package Explorer查看類和他們的層次結構。
內容輔助(自動完成功能(Ctrl +空格鍵))也是一個很好的幫助,但難道不建議更換使用未公開的API
您可以使用庫WALA讀出所有方法的簽名。然而,您將首先需要加載Stub-Code for Java。下面的程序將讀出的所有簽名:
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());
}
}
}
}
}
如果從here使用改編WALA版本它的Dalvik(例如Android應用程序)。
- 1. 如何從簽名文件中獲取簽名者的名稱
- 2. 簽名.Jar文件
- 3. 如何從.jar文件獲取日誌?
- 4. 如何從classpath獲取jar文件?
- 5. 如何從JAR文件獲取資源
- 6. 如何從jar中獲取文件?
- 7. 已簽名的應用程序文件 - 如何從文件中獲取簽名?
- 8. 如何使用pem文件簽名jar?
- 9. 從JAR中獲取文件
- 10. 如何從JavaScript文件獲取方法名稱
- 11. 如何從VariableDeclarationStatement獲取方法名稱
- 12. 如何在Eclipse中獲取方法的VM方法簽名?
- 13. 從外部Java獲取方法.jar文件
- 14. JAR文件:數字簽名
- 15. 從Java的Native方法獲取方法簽名
- 16. 如何從另一個文件中獲取方法undefined方法
- 17. 如何從.jnlp文件獲取.jar文件?
- 18. 如何從jar文件中獲取Manifest.mf文件內容
- 19. 如何簽名包含另一個jar文件的jar
- 20. 如何將簽名的jar文件轉換爲.exe文件並保持簽名?
- 21. 從main()方法中獲取可執行jar名稱
- 22. 如何以編程方式從* .dll(*。exe,*。msi)文件獲取簽名列表?
- 23. 如何從URI獲取文件名
- 24. 如何從Response.Header獲取文件名? C#
- 25. 如何從路徑獲取文件名?
- 26. 如何從request.FILES獲取文件名?
- 27. 如何從文件名獲取日期
- 28. 如何從意圖獲取文件名?
- 29. 如何從TextView中獲取文件名
- 30. 如何從nodejs app.post獲取文件名?
喜歡反思? – 2009-06-10 15:37:11