我正在尝试使用bcel使用 javaagent.jar.jar 来启动一个jar文件( main.jar )。基本上,无论何时在字节码中找到任何ALOAD,我都尝试使用
在类" someclass"中插入静态函数的函数调用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 )
java -cp someclasscontained.jar -javaagent:javaagent.jar -jar main.jar
我得到
Exception in thread "main" java.lang.NoClassDefFoundError: someclass
错误。我尝试了 -bootClassPath/p 选项,但仍无法使用。有人有任何线索吗?
(1)所有罐子都位于同一文件夹中2)这个问题可能类似于一个问题,但解决方案对该问题不正确/令人满意,所以请不要重复)
如果在另一个JAR文件中定义了SomeClass,则需要将其添加到代理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