gpt4 book ai didi

java - 变量定义和赋值检测asm字节码

转载 作者:行者123 更新时间:2023-12-01 15:52:39 24 4
gpt4 key购买 nike

我正在尝试使用 ASM 字节码树 API 对 Java 代码进行静态分析。我有一个 ClassNode cn、MethodNode m 和该方法中的指令列表,即 InsnList 列表。

假设对于给定的指令(即 AbstractInsnNode),我需要在上面的指令列表中找到 s 处变量的所有定义/赋值。为了更清楚地说明,假设在第 2 行定义并初始化变量 var,然后在第 8 行分配一些其他值,然后在第 12 行使用。在本例中,第 12 行是 my s。另外,假设中间的行中有大量条件代码。

这可能与 ASM 相关吗?怎么办?

感谢和问候,SJ

为了清楚起见,

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)是否(以及在哪里)被修改或分配在上面的任何位置代码。保持简单,只是成员变量(没有静态函数或委托(delegate)给另一个类的函数)。

最佳答案

SourceInterpreter计算SourceValue s对于每个 Frame MethodNode 中的相应指令。基本上它告诉哪些指令可以将值赋给给定的变量或堆栈槽。

另请参阅ASM User Guide有关 ASM 的更多信息 analysis包。

但是,如果您只需要检测某个变量是否被赋值,那么您所要做的就是查找具有相应变量索引的 xSTORE 指令。

关于java - 变量定义和赋值检测asm字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5698670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com