理解Java字节码
我经常被一个没有源代码的java类文件所困扰,我试图理解我手头的问题 请注意,反编译器在所有情况下都很有用,但还不够 我有两个问题理解Java字节码,java,bytecode,Java,Bytecode,我经常被一个没有源代码的java类文件所困扰,我试图理解我手头的问题 请注意,反编译器在所有情况下都很有用,但还不够 我有两个问题 有哪些工具可用于查看java字节码(最好从linux命令行获得) 熟悉java字节码语法的好参考资料是什么 与其直接查看Java字节码(需要熟悉Java虚拟机及其操作),不如尝试使用Java反编译实用程序。反编译器将尝试从指定的类文件创建java源文件 这是一个相关的问题,有助于了解如何反编译Java类文件 也就是说,可以使用JDK中的javap命令来分解Javac
与其直接查看Java字节码(需要熟悉Java虚拟机及其操作),不如尝试使用Java反编译实用程序。反编译器将尝试从指定的
类
文件创建java
源文件
这是一个相关的问题,有助于了解如何反编译Java类
文件
也就是说,可以使用JDK中的javap
命令来分解Javaclass
文件。javap
的输出将是类
文件中包含的Java字节码。但是请注意,字节码与Java源代码完全不同
了解Java字节码和Java虚拟机本身的确切来源是。特别是,它有一个所有字节码指令的索引。如果您有一个类,但没有源代码,但有一个bug,则可以执行以下两个基本操作之一:
javap
工具(带有-c选项)将反汇编字节码文件。它从命令行运行,并作为JavaSDK的一部分提供
2) 熟悉java字节码语法的好参考资料是什么
javap
工具使用的语法与JVM规范中使用的语法相同,JVM规范自然是最终的源代码。我还发现了BillVenners的“Java虚拟机内部”。我从来没有读过,而且看起来可能已经绝版了
实际的(文本)语法很简单,而且是不言自明的。。。假设您有一个解释字节码功能的参考,并且您对阅读此级别的代码相当熟悉。但是,读取反编译器的输出可能会更容易,即使字节码已经通过模糊器输入。要查看类文件的字节码指令,请使用
javap-v
命令,就像运行java程序一样,指定类路径(如果需要)和类名
例如:
javap -v com.company.package.MainClass
关于字节码指令集,
是一个分析反编译器,因此它将类反编译为可读的java代码,而不是字节码。当您想了解代码的工作原理时,它会更有用。您可能会发现Eclipse字节码大纲插件非常有用:
我自己也没有用过它,只是顺便提到过而已。1。我不知道可以使用AspectJ在.class中插入代码,我以为它在java上可以工作,但我想我错了。当我发现问题时,我该怎么办?很多时候,在解决问题的过程中,你会发现问题的实质是什么problem@hhafez-您可以在运行时将方面编织到类中,但是,这样做时可能会违反许可证,所以请小心一点。单元测试可能是你最好的选择,但如果代码不可测试,那么反编译将成为一种选择,但这是一个缓慢的过程,依我看,我对反编译器的评论,@hhafez:我想你的问题“理解Java字节码”得到了回答,不是吗?这个答案完全涵盖了原始问题的两个方面。