Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ASM使用代码查找偏移量_Java_Assembly_Bytecode_Offset - Fatal编程技术网

Java ASM使用代码查找偏移量

Java ASM使用代码查找偏移量,java,assembly,bytecode,offset,Java,Assembly,Bytecode,Offset,我想在我使用的测试用例中找到不同方法的偏移量。我可以找到方法的开始和结束位置,我可以查找操作码RETURN和ARETURN(我在扩展方法visitInsn()中的methodVisitor的类中这样做),但我无法找到字节码中发生的偏移量。有什么想法吗 以防万一: 我正在使用ASM的核心API,我知道树API可以帮助我找到我需要的东西,但是树API会让一切都变慢并使用内存,我负担不起这些,所以我使用核心API,我找到了一种方法来获得每条指令的偏移量,这不是一种常见的方法,但对我来说很有效。ASM不

我想在我使用的测试用例中找到不同方法的偏移量。我可以找到方法的开始和结束位置,我可以查找操作码RETURN和ARETURN(我在扩展方法visitInsn()中的methodVisitor的类中这样做),但我无法找到字节码中发生的偏移量。有什么想法吗

以防万一:
我正在使用ASM的核心API,我知道树API可以帮助我找到我需要的东西,但是树API会让一切都变慢并使用内存,我负担不起这些,所以我使用核心API,我找到了一种方法来获得每条指令的偏移量,这不是一种常见的方法,但对我来说很有效。ASM不会给你每条指令的偏移量,因为通常你不需要它,但你仍然可以得到它,我不得不修改ASM中的类来实现我的想法


我修改了Label类和ClassReader类,在第二个类中,有一个部分只在特殊情况下创建标签并将标签添加到labels数组,所以我只告诉它为每个指令添加一个标签,然后我只在methodVisitor中调用visitInsn中的getOffset,标签将被解析并具有偏移量。

为什么需要知道偏移量?我需要它们,因为我运行其他代码,使用偏移量分析代码的特定部分,但我必须搜索它们我自己运行的javap和其他东西,所以我不想再这样做了…我建议你有一个字节码分析工具,如ASM、BCEL或Javaassist。这些工具的设计目的是使编写这样的工具变得更容易,并且您不需要知道偏移量。