15
|
Ran Biron · 技术社区 · 15 年前 |
![]() |
1
11
我不认为这是一个完整的答案,但一些可能提供一些可行的建议: (1)在查看和直接使用旧字节码方面 BCEL Class Construction Kit 可能很有用(它是我所知道的字节码的唯一GUI编辑器)。 (2)在调试和步进字节码方面, this Eclipse plugin ,它与Eclipse的调试器集成可以满足您的需要。 我不知道有什么实用程序可以组合这些特性,并允许您在代码执行时操作字节码(至少在Ollydbg中可以这样做,等等)。但是,Java debugger API 应该能够支持在运行时操作代码(尽管,考虑到Hotspot和JIT的一般性质,我不知道是否可以在调用前重写一条指令---当前执行的字节码操作码实际上是解释程序选择如何实现操作的一个抽象,与本地代码不同的是,当重新分解的操作码实际上是发送给CPU的指令)。或者,您可以查看 Java Instrumentation API 它提供了一种在运行时重新定义字节代码的方法。当然, any of the various open source bytecode manipulation libraries 可能能够帮助或提供灵感。 当然,总是可以选择绕过整个JVM基础设施,并将调试器简单地附加到JVM进程。对此有一些讨论 in this question 以及在 this page linked from that question . 然而,底线是,你似乎要完成的,而在本机代码世界中常见的地方,在Java世界中并不是那么常见的(使用Java的一部分原因是从所有血淋淋的细节中抽象出来)。这和字节代码反编译的相对琐碎性质(与C++相比)导致了这种类型的需求稀少,而这种类型的工具也是如此。 |
![]() |
2
2
看一看 JAD Decomplier 用于反编译Java代码。然后可以使用生成的源运行IDE的内置调试器。IDE可以是Intellij、Eclipse或NetBeans。这种方法不是完全自动的,但它应该能够完成这项工作。 |
![]() |
mrbela · 使用javap读取字节码 9 年前 |