代码之家  ›  专栏  ›  技术社区  ›  Rejeev Divakaran

使用ClassFileTransformer.transform的字节码检测

  •  6
  • Rejeev Divakaran  · 技术社区  · 15 年前

    premain 方法,在该方法中,我添加了一个 ClassFileTransformer Instrumentation ( Instrumentation.addTransformer() ).

    我使用

    java -javaagent:<path_to_agnet.jar> <application>
    

    然而 ClassFileTransformer.transform() 方法未被调用。
    普雷曼 正在调用。
    我还注意到,如果我打电话 Instrumentation.retransformClasses() 然后 ClassFileTransformer.transform()
    关于第一个定义( Classloader.defineClass() ), transform() 方法未被调用。

    有什么不对劲的线索吗?

    注意:如果有任何帮助,我可以发布源代码。

    当做

    1 回复  |  直到 15 年前
        1
  •  4
  •   Community Tales Farias    7 年前

    可能原因

    不正确的舱单

    你听懂了吗 all the steps required 定义一个插装类?

    特别是“打包”步骤,其中涉及在JAR清单中指定一组稍微不同的属性:

    • 而不是 Main-Class Premain-Class 属性,该属性提供实现的类的完整类名 premain() 在你的经纪人那里。
    Premain-Class: my.package.MyAgentClass
    
    • Boot-Class-Path 属性,因为您的插装代理需要其库从引导类加载器可见。
      如果你不这样做,你可能不得不使用古怪的 -Xbootclasspath/a:... JVM的参数。

    • Can-Redefine-Classes 属性

    .

    ( Rejeev Divakaran 我知道了)。

    classBeingRedefined.getName()
    classBeingRedefined null 第一次加载时

    底线是如果有 转换方法中的未捕获异常 .
    会的 .