是否有类似于 OllyDbg / SoftICE for 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 文件(使用编辑后的代码)。