是否有類似於Java的OllyDbg/SoftICE的實用程序?即執行類(從jar /帶有類路徑),並且在沒有源代碼的情況下,顯示中間代碼的反彙編,能夠遍歷/跨越/搜索引用/編輯內存中的特定中間代碼/將編輯應用於文件...是否有針對java的反彙編程序+調試器(ala OllyDbg/SoftICE for assembler)?
如果沒有,是否甚至有可能寫這樣的東西(假設我們願意在調試時間內沒有熱點)?
編輯:我不是在談論JAD或JD或Cavaj。這些都是很好的反編譯器,但我不想有一個反編譯器出於幾個原因,最值得注意的是它們的輸出是不正確的(最好,有時只是錯誤的)。我沒有尋找一個神奇的「編譯字節到Java代碼」 - 我想看看即將執行的實際字節。另外,我希望能夠更改這些字節(就像在彙編調試器中一樣),並希望將更改後的部分寫回到類文件中。編輯2:我知道javap存在 - 但它只有一種方法(也沒有任何分析)。 實施例(從vmspec文檔取代碼): 從Java代碼,我們使用 「的javac」 編譯此:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
到一個Java類文件。使用的javap -c我能得到這樣的輸出:
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
這是拆卸部分OK(不是很好不加分析 - 「欄#4是Example.i」),但我無法找到兩個其他「工具」:
- 一個調試器自己翻查指令(包括堆棧,內存轉儲等),允許我檢查實際的代碼和環境。
- 一種反轉過程的方法 - 編輯反彙編的代碼並重新創建.class文件(使用編輯後的代碼)。
哇,很好的答案。可惜沒有這樣的工具。我懷疑我會自己創建一個(非常有趣 - 但工作壓力,生活,沒有足夠的領域知識...)。 感謝您的非常完整的答案。 – 2010-04-02 12:18:08
+1所有這些信息幫助了我很多! =)謝謝 – jyz 2010-10-09 23:01:56