gpt4 book ai didi

java - 使用 ClassFileTransformer.transform 的字节码检测

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:42 25 4
gpt4 key购买 nike

我用 premain 方法编写了一个类,在该方法中我添加了一个 ClassFileTransformerInstrumentation (Instrumentation.addTransformer ()).

我已经使用

调用了一个应用程序
java -javaagent:<path_to_agnet.jar> <application>

但是 ClassFileTransformer.transform() 方法没有被调用。
我观察到正在调用 premain
我还观察到,如果我调用 Instrumentation.retransformClasses(),则会调用 ClassFileTransformer.transform()
在第一次定义 (Classloader.defineClass()) 时,transform() 方法未被调用。

知道哪里出了问题吗?

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

问候,Rejeev。

最佳答案

可能的原因

.

不正确的 MANIFEST

你有没有关注all the steps required定义一个 Instrumentation 类?

特别是“打包”步骤,它涉及在 JAR 的 list 中指定一组略有不同的属性:

  • Instead of Main-Class, you must specify a Premain-Class attribute that gives the full class-name of the class that implements premain() in your agent.
Premain-Class: my.package.MyAgentClass
  • If your agent uses any class-libraries, then you should specify the Boot-Class-Path attribute, since your instrumentation agent will need its libraries to be visible from the bootstrap classloader.
    If you don’t do this, you will probably have to use the wacky -Xbootclasspath/a:... argument to the JVM.
    The command-line argument is a decent way to get things going, but you want to use this attribute in the long-run, because the command-line is already growing from having to specify the Java instrumentation agent. Might as well keep it as simple as possible.

  • Finally, there is the Can-Redefine-Classes attribute.
    If it is set to true, then the Java instrumentation agent is able to redefine the classes that the agent itself uses.
    This is a pretty odd circumstance, and certainly won’t arise much.

.

静默异常

(Rejeev Divakaran 得到了那个)。

我正在使用 classBeingRedefined.getName() 打印类名。
classBeingRedefined 第一次加载时为null

底线是转换方法中是否存在未捕获的异常
它会被默默地吃掉

关于java - 使用 ClassFileTransformer.transform 的字节码检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/729368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com