有没有用于java的反汇编器+调试器(ala OllyDbg / SoftICE for assembler)?
有没有类似于OllyDbg / SoftICE的java实用程序?即执行类(从jar/具有类路径),并且在没有源代码的情况下,显示中间代码的分解,能够单步执行/单步执行/搜索引用/编辑内存中的特定中间代码/将编辑应用于文件...
如果没有,是否有可能写这样的东西(假设我们愿意在调试期间没有热点)?
编辑:我不是在谈论JAD或JD或Cavaj。这些都是很好的反编译器,但我不想要一个反编译器,原因有几个,最值得注意的是它们的输出不正确(充其量,有时只是完全错误)。我不是在寻找一个神奇的“编译字节到java代码” - 我想看看即将执行的实际字节。另外,我希望能够更改这些字节(就像在程序集调试器中一样),并希望将更改的部分写回类文件。
Edit2:我知道javap存在 - 但它只做一种方式(没有任何分析)。示例(代码取自 vmspec 文档):在 java 代码中,我们使用“javac”来编译以下内容:
void setIt(int value) {
i = value;
}
int getIt() {
return i;
}
到 java .class 文件。使用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
这对于拆卸部分来说是可以的(没有分析就不是很好 - “字段#4是Example.i”),但我找不到另外两个“工具”:
- 一个调试器,它检查指令本身(使用堆栈,内存转储等),允许我检查实际的代码和环境。
- 一种反转过程的方法 - 编辑反汇编的代码并重新创建.class文件(使用编辑的代码)。