如何解决变量定义和赋值检测asm字节码
| 我正在尝试使用ASM字节码树API进行Java代码的静态分析。 我有一个ClassNode cn,MethodNode m以及该方法中的指令列表,例如InsnList list。 假设对于给定的指令(即AbstractInsnNode),我需要在上述指令列表的s处找到变量的所有定义/赋值。为了更清楚一点,假设在第2行上定义并初始化了变量var,然后在第8行上分配了一些其他值,然后在第12行上使用。在这种情况下,第12行是my。同样,在它们之间的行中假设很多条件代码。 这可能与ASM有关吗?怎么样?? 谢谢并恭祝安康, J 为了清楚起见,public void funcToAnalyze(String k,SomeClass v) {
int numIter = 0;
/*
Do cool stuff here.... modifies member variables and passed params too
*/
if (v.rank > 1 || numIter>200) {
magicFunction(k,1);
}
}
在这里,假设条件是JumpInsnNode(当前指令),我需要确定条件中的任何变量(在这种情况下为v.rank和numIter)是否(以及在何处)被修改或分配为上述代码中的任意位置。保持简单,只是成员变量(无静态函数或委派其他类的函数)。
解决方法
SourceInterpreter计算SourceValues
在MethodNode中为相应指令的每个帧。基本上,它告诉哪些指令可以将值放置到给定的变量或堆栈插槽中。
另请参阅《 ASM用户指南》以获取有关ASM分析软件包的更多信息。
但是,如果只需要检测是否已分配某些变量,那么您要做的就是寻找带有相应变量索引的xSTORE指令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。