通常我坚持不包含源Java类文件,我想了解我手头的问题。
注意反编译器是有用的,但在所有的情况下不充分......
我有两个问题
- 什么工具可以查看Java字节码(优选地可从Linux命令行)
- 什么是很好的参考,以熟悉Java字节代码语法
通常我坚持不包含源Java类文件,我想了解我手头的问题。
注意反编译器是有用的,但在所有的情况下不充分......
我有两个问题
而不是直接在Java字节码,这将需要与Java虚拟机及其操作的熟悉程度看,一个可以尝试使用Java反编译工具。 反编译器将尝试创建一个java
从指定的源文件class
文件。
该如何“反编译” Java类文件? 是将信息以找出如何编译Java中的相关问题class
文件。
这就是说,一个可以使用javap
命令,它是为了拆卸的Java JDK的一部分class
文件。 输出javap
将是包含在了Java字节码class
文件。 但不要被警告,字节码并不像Java源代码的。
定源学习有关Java字节码和Java虚拟机本身是Java虚拟机规范,第二版 。 特别是, 第6章:Java虚拟机指令集具有的所有字节码指令的索引。
要查看类文件的字节码指令,使用javap -v
命令,以同样的方式,如果你运行Java程序的,指定的类路径(如有必要)和类名。
例:
javap -v com.company.package.MainClass
关于字节码指令集, 指令集摘要
Fernflower是一种分析反编译,所以它会反编译的类为可读java代码而不是字节码。 如果你想了解代码是如何工作它更有用。
如果你有一个类,并没有源代码,但你有一个错误,你可以做两件基本的事情之一:
写出类单元测试,确定是什么原因造成的错误,报告本单元测试的错误,并等待它是固定的。
(2)一般是一个系统管理员,以我的经验,比较喜欢。
如果你有去(2)然后,在此期间,因为你知道是什么原因造成的错误,你可以不会允许输入要去类,以防止问题,或者在错误发生时做好准备,妥善处理。
你也可以用AspectJ代码注入问题类,并改变方法的行为,而实际上重新编译。 我想,这可能是最好的选择,因为你可以改变它可能调用函数的所有代码,而不必担心教大家这个问题。
如果你学会阅读字节码指令,你会做什么来解决这个问题?
我有两个问题
1)什么工具可用来查看Java字节码(优选地可从Linux命令行)
该javap
工具(使用-c选项)将拆解字节码文件。 它在命令行上运行,并且被提供作为Java SDK的一部分。
2)什么是很好的参考,以熟悉Java字节代码语法
的javap
工具使用相同的语法如在JVM规范被使用,并且JVM规范自然是权威来源。 我还发现“里面的Java虚拟机”,由比尔。 我从来没有读过它,它看起来可能是绝版。
实际(文本)语法很简单,自我解释......假设你有什么解释字节码做一个参考,而你是适度熟悉在这个级别识别代码。 但它可能是更容易阅读反编译的输出,即使字节码已通过混淆器供电。
您可能会发现Eclipse的字节代码大纲插件有用:
http://andrei.gmxhome.de/bytecode/index.html
我没有用它自己 - 只是看到它在传递提及。