javap输出中缺少指令编号
发布时间:2020-12-15 04:18:49 所属栏目:Java 来源:网络整理
导读:每当我尝试理解已编译的 Java文件的反汇编代码时,我都想知道为什么缺少某些指令编号. 一个小例子: 我反汇编($javap -c HelloWorld)一个简单的HelloWorld类.这是输出: Compiled from "HelloWorld.java"public class HelloWorld { public HelloWorld(); Code
每当我尝试理解已编译的
Java文件的反汇编代码时,我都想知道为什么缺少某些指令编号.
一个小例子: 我反汇编($javap -c HelloWorld)一个简单的HelloWorld类.这是输出: Compiled from "HelloWorld.java" public class HelloWorld { public HelloWorld(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String Hello World! 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return } 如您所见,构造函数中的指令3和4以及main方法中的一些指令都缺失. 有人知道为什么这些指令编号丢失了吗?是否有一些由于某种原因隐藏的字节码指令? 解决方法
“漏洞”是当前指令的参数,参见
Java Virtual Machine Specification.它包含
Chapter 6中的完整字节码列表.
例如, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |