ASM通过代码查找偏移量

时间:2012-07-03 20:50:28

标签: java assembly bytecode offset

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

以防万一: 我正在使用ASM的核心API,我知道树API可以帮助我找到我需要的东西,但树API使一切变得缓慢并使用内存而我买不起任何这些,所以我使用核心API

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来获得每条指令的偏移,这不是一种常见的方式,但它适用于我。 ASM没有给你每条指令的偏移量,因为通常你不需要它,但是你仍然可以得到它,我不得不在ASM中修改类以使我的想法有效。

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