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-它们将生成一个图,您无法确定主导地位,也无法分辨范围是何时增加或减小。
#1 楼
Marijn Haverbeke的tern项目解决了JavaScript中的范围问题(以及动态类型的相关问题)。也许这可能对这种情况有很大帮助。有效地,当您拥有反编译的源代码时,您可以使用tern之类的东西将其作为源代码即时分析(如javascript燕鸥是设计的)
评论
不喜欢吗?但是它确实提供了一种方法来检查反编译源中变量的(静态)范围,这可能是针对javascript的(并且是开源的),但可以轻松地(大概)将其修改为其他源代码
– Nikos M.
2014年5月26日15:14
评论
在组装级别上没有这样的概念,简单地说:您不会知道。您当然可以遵循条件跳转,但它们可能与原始条件中的作用域不一致。基本上将C转换为汇编程序再转换为二进制程序是有损过程,在进行逆向工程时必须处理它。