Java计算执行的单个字节码指令

时间:2017-02-13 23:51:57

标签: java bytecode instrumentation java-bytecode-asm

我正在尝试使用ASM来计算在单个函数中执行的单个字节码指令来构建直方图。我看到有一个工具ByCounter可以执行类似的任务 - 但我无法访问源代码。

我的理解是Java asm字节码库可以检测类,字段和方法,但是找不到用于检测单个字节码指令的示例(尽管来自ByCounter - 它是可能的)。

如果像JVMTI这样的工具更适合,那么这也是有用的信息!

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是我Jawa所做的那种愚蠢的事情。例如:

from collections import Counter
from jawa.cf import ClassFile
import pandas


with open('tests/data/HelloWorldDebug.class', 'rb') as fin:
    cf = ClassFile(fin)

    method = cf.methods.find_one(name='<init>')

    ins = Counter(i.mnemonic for i in method.code.disassemble())

    df = pandas.DataFrame.from_dict(ins, orient='index')
    fig = df.plot(kind='bar').get_figure()
    fig.savefig('example.png')

histogram