给定 Java Class A 的 .class 文件,有没有办法(例如使用 BCEL、ASM 等)提取给定的字节码序列(假设它是一个基本块),将其放在单独的位置,然后再执行那个字节码序列?
示例:源代码具有以下行 ... a += b; b += 21; . .
我只能访问字节码表示。我想提取这些字节码并将它们视为黑匣子。在 A 类的指令中,而不是源代码行 'a += b;' 我希望它指向这个外部黑盒 X,它包含适当的缺失字节码序列。我想向黑盒提供堆栈帧上的所有必要变量(例如,a、b 的当前值,也许是要在黑盒 X 中使用的方法参数......),然后,在执行字节码序列后,黑匣子会将控制权连同新更新的帧变量一起返回给原始 A 类...
感谢您的任何想法。
编辑:
正如下面所建议的,最合理的黑盒应该是存根类文件中的存根方法。那么问题就变成了,我如何最合理地从这个指令序列创建这个格式良好的存根类和方法,以及如何将控制权从原始 A 类转移到。理想情况下,这将在编译时“离线”完成时间。