【问题标题】:ASM find offset with codeASM 使用代码查找偏移量
【发布时间】:2012-07-03 20:50:27
【问题描述】:

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

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

【问题讨论】:

  • 为什么需要知道偏移量?您不直接使用这些,可能应该尝试。
  • 我需要它们,因为我运行其他代码来分析代码的特定部分使用偏移量,但我必须搜索它们我自己运行的 javap 和东西,所以我只是不想这样做不再...
  • 我建议你有一个字节码分析工具,比如 ASM 或 BCEL 或 Javaassist。这些旨在使编写这样的工具变得更容易,并且您不需要知道偏移量。

标签: java assembly bytecode offset


【解决方案1】:

我找到了一种方法来获取每条指令的偏移量,这不是一种常见的方法,但它对我有用。 ASM 不会为您提供每条指令的偏移量,因为通常您不需要它,但您仍然可以获得它,我必须修改 ASM 中的类以使我的想法生效。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2017-10-18
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2013-02-13
    相关资源
    最近更新 更多