使用 ClassFileTransformer.transform 进行字节码检测
我用 premain
方法编写了一个类,并在该方法中添加了一个 ClassFileTransformer
到 Instrumentation
(Instrumentation.addTransformer()< /代码>)。
了应用程序
java -javaagent:<path_to_agnet.jar> <application>
我已使用但未调用 ClassFileTransformer.transform()
方法调用 。
我观察到 premain
正在被调用。
我还观察到,如果我调用 Instrumentation.retransformClasses()
,则会调用 ClassFileTransformer.transform()
。
在第一个定义 (Classloader.defineClass()
) 中,未调用 transform()
方法。
任何线索可能出了什么问题吗?
注意:如果有任何帮助,我可以发布源代码。
问候, 雷吉夫。
I have written a Class with premain
method and inside that method I have added a ClassFileTransformer
to Instrumentation
(Instrumentation.addTransformer()
).
I have invoked a application using
java -javaagent:<path_to_agnet.jar> <application>
However ClassFileTransformer.transform()
method is not being invoked.
I have observed that premain
is being invoked.
I have also observed that if I call Instrumentation.retransformClasses()
, then ClassFileTransformer.transform()
is being invoked.
On first definition (Classloader.defineClass()
), transform()
method is not being invoked.
Any clue what could be wrong?
Note: I can post the source code if that is of any help.
Regards,
Rejeev.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可能的原因
。
清单不正确
您是否遵循了所需的所有步骤 定义一个 Instrumentation 类?
特别是“打包”步骤,其中涉及在 JAR 清单中指定一组略有不同的属性:
。
静默异常
(Rejeev Divakaran 得到了这个)。
我使用
classBeingRedefine.getName()
来打印类名称。第一次加载时
classBeingRedefine
为null
。最重要的是转换方法中是否存在未捕获的异常。
它会被无声无息地吃掉。
Possible causes
.
Incorrect MANIFEST
Did you follow all the steps required to define an Instrumentation class ?
Especially the "packaging" step, which involve specifing a slightly different set of attributes in the JAR’s manifest:
.
Silent Exception
(Rejeev Divakaran got that one).
I was using
classBeingRedefined.getName()
to print the class name.classBeingRedefined
isnull
when it is loaded first time.The bottom line is if there is uncaught exception in transform method.
It will be silently eaten up.