2

我正在尝试使用 BCEL使用javaagent.jar检测 jar 文件( main.jar) 。基本上,无论何时我在字节码中找到任何负载,我都试图在“someclass”类中插入一个对名为 Fun() 的静态函数的函数调用

if (opcode instanceof aload) {
 iFactory.createInvoke("someclass", "fun", Type.VOID, new Type[]{}, Constants.INVOKESTATIC);

我的“someclass”类驻留在 javaagent.jar

在执行

java  -javaagent:javaagent.jar -jar main.jar

或者

java  -javaagent:javaagent.jar -jar main.jar javaagent.jar

或(我为我的“someclass”创建了一个单独的 jar,名为someclasscontained.jar

java -cp someclasscontained.jar  -javaagent:javaagent.jar -jar main.jar 

我正进入(状态

Exception in thread "main" java.lang.NoClassDefFoundError: someclass

错误。我尝试使用-bootclasspath/p选项,但仍然无法正常工作。有人知道吗?

(1)所有 jar 都位于同一个文件夹中 2)这个问题可能与一个问题相似,但该问题的解决方案不正确/不令人满意,所以请不要将其标记为重复)

4

1 回答 1

4

如果 someclass 在不同的 jar 文件中定义,则需要将其添加到代理 jar 清单文件中的 Boot-Class-Path 列表中:

some.jar  -> contains someclass.class
javaagent.jar -> contains your instrumenting classes and MANIFEST.MF file

MANIFEST.MF file should contain line like
Boot-Class-Path: javaagent.jar some.jar
于 2018-09-07T22:45:23.887 回答