我正在尝试使用BCEL来检测带有javaagent.jar的jar文件(main.jar)。基本上我在字节码中找到任何aload,我试图在类“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”创建了一个名为someclasscontained.jar的独立jar)
java -cp someclasscontained.jar -javaagent:javaagent.jar -jar main.jar
我正进入(状态
Exception in thread "main" java.lang.NoClassDefFoundError: someclass
错误。我尝试使用-bootclasspath / p选项,但仍然无法正常工作。有没有人有任何线索?
(1)所有jar都位于同一个文件夹中2)这个问题可能类似于一个问题,但解决方案对于该问题不正确/满意,所以请不要将其标记为重复)
如果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