变量定义和赋值检测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指令。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...