【java字节码指令列表(转)】教程文章相关的互联网学习教程文章

javap指令集

栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 fconst_0 将float类型常量0压入栈 fconst_1 将float类型常量1...

通过javap命令分析java汇编指令

一、javap命令简述 javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成class文件时,指定参数才能输出,比如,你直接javac xx.java,就不会在生成对应的局部变量表等信息,如果你使用javac ...

android-Dalvik文件格式(* .dx)是否比Java .class文件支持更多指令?

Dalvik VM支持哪些功能(就字节码而言)当前未使用,因为.class文件没有? 例如,如果人们为自己的功能语言XYZ编写自己的Source-to-DX转换器,他们将能够实现e. G.完整的尾部调用,尽管.class文件仅在某些情况下才支持尾部调用?解决方法:我不是专家,但据我所知,答案是否定的. 以下两个站点列出了Dalvik和JVM操作码,并且撇开了Dalvik是基于寄存器的VM和JVM是基于堆栈的事实,这些操作码非常相似. http://pallergabor.uw.hu/androidblog/da...

如何使用Java StAX格式化和读取XML处理指令?【代码】

首先,如何格式化XML处理指令?<?processingInstructionName attribute="value" attribute2="value2"?>然后,我想使用StAX通过处理XMLStreamConstants.PROCESSING_INSTRUCTION(javadoc)事件来读取它,但是它仅提供了两种方法来从XMLStreamReader检索有关处理指令的信息:getPITarget() getPIData()这两种方法的javadoc并不是很有帮助. > XML格式正确吗?>这是正确的方法吗解析处理指令使用StAX XMLStreamReader蜜蜂?>如何使用getPITa...

有没有一种聪明的方法来确定Java字节码指令的长度?【代码】

我正在为Java创建一个静态分析工具,并且有一些关于我正在分析的程序的信息,如果我可以从.class文件中的字节码中获取它,将会更容易获得. 我不关心可能在类文件中的每一个instructions.例如,我可能只需要查看是否有任何getfield指令. 问题是,由于每条指令都有一个可变长度,似乎在一般情况下,我需要(在我的代码中)指定每个操作码的长度,然后才能确定(例如)getfield指令的开始和结束位置. 对于其他一些指令集(如x86),有一些规则,如“低...

java中的指令重新排序和发生之前的关系【代码】

参见英文答案 > How to understand happens-before consistent 4个在Java Concurrency In Practice一书中,我们被告知可以通过编译器,JVM在运行时甚至由处理器重新排序程序的指令.因此,我们应该假设执行的程序不会以与我们在源代码中指定的顺序完全相同的顺序执行其指令. 但是,讨论Java内存模型的最后一章提供了一个先前发生的规则列表,指出了JVM保留了哪些指令排序.这些规则中的第一条是: >“...

Java字节码lookupswitch和tableswitch总指令长度【代码】

使用给定的字节码,当遇到切换指令时,我想知道下一条指令的位置(不运行代码).为了做到这一点,我想我应该计算指令的总大小,包括跳转偏移或匹配偏移对.这可能吗?如果不是,怎么可能知道下一条指令在哪里? 此外,还有其他任何具有动态大小的字节码指令(它们的大小基于变量)吗? tableswitchtableswitch <0-3 byte pad> defaultbyte1 defaultbyte2 defaultbyte3 defaultbyte4 lowbyte1 lowbyte2 lowbyte3 lowbyte4 highbyte1 highbyte2 ...

java – jvm中pop和pop2指令有什么区别?【代码】

我提到了下面的oracle jvm doc https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.poppop Operation Pop the top operand stack value Format pop Forms pop = 87 (0x57) Operand Stack …, value → … Description Pop the top value from the operand stack. The pop instruction must not be used unless value is a value of acategory 1 computational type (2.11.1). pop2 Operation Pop the top o...

java – LDC指令代码的负值是什么意思?【代码】

我是java字节码世界的新手.我有一些涉及字节码的调试任务.经过时我注意到一些看起来很可疑的值,但我不确定.这是完整字节码的一部分// access flags 0x100Aprivate static synthetic $jacocoInit()[ZGETSTATIC ClassUnderTest.$jacocoData : [ZDUPIFNONNULL L0POPLDC -1475355800743669619LDC "ClassUnderTest"BIPUSH 64INVOKESTATIC org/jacoco/agent/rt/internal_1f1cc91/Offline.getProbes (JLjava/lang/String;I)[ZDUPPUTSTATIC...

java – 如何测量类文件中字节码指令的数量?【代码】

我已经计算了每个类文件的平均圈复杂度.我想知道如何使用Eclipse测量每个类文件中的字节码指令数量?解决方法:我不知道你是否可以从Eclipse轻松地做到这一点,但你可以使用javap -c来获取类文件的反汇编.如果您只关心每个方法的指令数,那么在脚本中包装它不应该太难. 例:$javap -c Test Compiled from "Test.java" public class Test extends java.lang.Object{ public Test();Code:0: aload_01: invokespecial #1; //Method...

java – Eclipse EcLemma覆盖指令的数量超过代码行数【代码】

在覆盖结果中,它显示我已经覆盖了9条指令,而只有5条线突出显示为绿色.其他4条指令是哪条? 解决方法:单击Coverage框右上角的下拉箭头.它会给你一个couple different ways to measure your coverage.默认似乎是指令(字节码指令),但你可以手动选择行. 您看到9条指令的原因是因为Foo中有9个字节码指令:$javap -c Foo.class Compiled from "Foo.java" public class Foo {public Foo();Code:0: aload_01: invokespecial #8 ...

Android Studio 新建一个简单的Jni-demo,实现了so库的生成与调用(使用 javah 和 ndk-build指令方式来生成so库)。【图】

三步走 第一步:创建一个Jni-demo项目。以图形方式一步步指引(just for 新手):等待gradle build的完成,第一步就此结束。 备注:如果有的朋友遇到gradle太慢的情况,可以参考我的这篇博文,希望可以解决你的问题。https://blog.csdn.net/qq_41811438/article/details/97616483 第二步:生成so库。 1、添加jni文件。如此操作后,在<项目存放位置>\app\src\main目录下就多出了一个jni空文件夹。 比如我的就是在E:\AndroidProjects...

java – 根据执行历史记录,给定指令的操作数堆栈大小是否不同?【代码】

例如,对于方法public int f() {int k = 1;for (int i = 0; i < 10; i++) {k += 2;}return k; }javac生成以下字节码:public int f(); Code:0: iconst_11: istore_12: iconst_03: istore_24: iload_25: bipush 107: if_icmpge 1910: iinc 1, 213: iinc 2, 116: goto 419: iload_120: ireturn在标签4处,堆栈具有相同的大小(0),无论先前是哪个指令:3或16. 对于从java代码生成的字节码,这通常是...

ASM Java替换方法调用指令【代码】

背景 我想使用ASM Java框架对一些耗时的方法(如org / json / JSONObject.toString())进行一些检测工作. 原始调用方法public class JSONUsage {public void callToString() {JSONObject jsonObject = new JSONObject();String a = jsonObject.toString();//original callSystem.out.println(a);} }仪表后public class JSONUsage {public void callToString() {JSONObject jsonObject = new JSONObject();// **important!**//pass th...

使用jsr指令进行Java递归【代码】

我使用Jasmin Java汇编程序编译玩具语言.但是当我使用jsr指令递归回子程序,并使用java运行Jasmin的输出时,我收到错误“递归调用jsr条目”.这是Jasmin代码(它是计算5!(我已经省略了类定义;所有这些都在主方法体中)):f:swapistore 2iload 2ifeq label0iload 2iload 2ldc 1isubjsr fistore 1istore 2iload 1iload 2imulgoto label1 label0:ldc 1 label1:swapastore 0ret 0 main:ldc 5jsr fistore 1iload 1解决方法:§4.8.2 of the JV...