我正在尝试使用简单的类使用 javassist 分析字节码MyData
:
class MyData {
private Collection<String> strings = new ArrayList<String>();
// .....................
public void add(String str) {
strings.add(str); // line number 35
}
// .....................
}
这是我针对此类运行的代码:
ClassFile cf = new ClassFile(new DataInputStream(TryJavassist.class.getResourceAsStream("MyData.class")));
MethodInfo minfo = cf.getMethod("add");
CodeAttribute ca = minfo.getCodeAttribute();
for (CodeIterator ci = ca.iterator(); ci.hasNext();) {
int index = ci.next();
int op = ci.byteAt(index);
System.out.println(op + "=" + Mnemonic.OPCODE[op] + ": " + minfo.getLineNumber(index));
}
它可以工作并打印:
42=aload_0: 35
180=getfield: 35
43=aload_1: 35
185=invokeinterface: 35
87=pop: 35
177=return: 36
第 35 行调用add()
名为 的集合的方法strings
。我发布的代码片段仅检索invokeinterface
第 35 行。好的,我可以知道它是类字段 ( getfield
)。
我想知道如何获取其余信息:
- 字段名称是
strings
- 被调用的接口方法是
add()
到目前为止,谷歌搜索和阅读 API 文档都没有给出任何积极的结果。