如何检测Java字节码中的数组大小(FindBugs)
作者:互联网
我想通过查看字节码来了解正在分配的数组的大小,如果在编译时知道该信息,当然.
背景:我想编写一个FindBugs检测器(查看编译的字节码)并报告某些阵列分配的发生.为了滤除误报,我对“小”数组不感兴趣,只对编程时大小不可用或大于可配置阈值的数组感兴趣.
由于FindBugs的源代码没有太多记录,我正在寻找一些关于如何开始的指针 – 也许已经有一个检测器做了类似我能看到的东西.
解决方法:
这可能会有点棘手.我的知识不完整,但你至少要注意三种说明(NEWARRAY,ANEWARRAY和MULTIANEWARRAY).查看上一条指令(或者在MULTIANEWARRAY的情况下,n先前的指令)获取大小,即使它是常量,也可能加载BIPUSH,SIPUSH或LDC(其他任何东西?),具体取决于大小.正如您所指出的,如果该类是计算的结果,您可能会无限期地追溯指令.
如果我没记错的话,FindBugs会在内部使用BCEL,但我从来没有在那里挖掘过,看看他们究竟有多聪明.如果这些团队中的任何一个拥有适当的邮件列表,他们可能会被证明是一个更好的地方 – 他们可能至少知道某人之前是否已经走过这条路.
标签:java,arrays,static-analysis,bytecode,findbugs 来源: https://codeday.me/bug/20190527/1160591.html