我正在寻找一种算法或一些关于在对反编译的 ASM 源进行静态分析时如何找到范围变化的技巧。我需要知道跟踪堆栈使用情况和达到变量定义的范围更改。如果我有一个像
int somefunc(int b) {
// Scope 1
a = b + 1;
if(a > 0) {
// Scope 2
a = 0
} else {
// Scope 3
a = b;
}
return a;
一旦我从程序集构建了流程图,我怎么知道范围从 1-2 变化到 2-1 等?到目前为止,我唯一的猜测是它与支配地位和检查子图有关。我会看到这种方法的一些问题是具有提前终止的循环或语句,例如 break;继续; return - 他们将生成一个图表,您无法确定支配地位,也无法判断您的范围何时增加或减少。