【问题标题】:How to estimate a variable's value with static analysis?如何用静态分析估计变量的值?
【发布时间】:2014-04-08 07:37:09
【问题描述】:

我想根据 Soot 内置的 Reaching-Definition 分析编写一个程序来执行此操作。现在我想知道这是正确的方法吗?我搜索并发现似乎没有人对这个方向感兴趣。

有什么建议吗?

【问题讨论】:

  • 这对我来说没有多大意义。估计变量的值是什么意思?以及如何达到定义分析相关?
  • @StephenC,我在这里做一些安全评估,例如,如果我发现某个 Android 应用在其 sendText() 函数中使用了付费目标,我可以标记它。跨度>
  • 通过到达-定义分析,我可以找到一个变量的相关定义位点,并递归地检查每个位点以找到分配给该变量的可能值。
  • 这与估计变量的值无关。
  • @StephenC:每个达到的定义都显示了值范围的来源(在开始时,某个输入 [“付费目标”] 周围的零宽度范围或诸如 3 之类的恒定值)如何被分配消耗。到达点的到达定义集给出了范围集,可以保守地组合成一个范围。您可能会争辩说,集合比范围更好。这一切所做的只是改变计算结果的努力,并给出不同的保守结果。

标签: java static-analysis intermediate-language soot


【解决方案1】:

您可能想要做的是使用iterative data flow solver 组合一组范围。您希望将输入中的范围值组合成跨基本块的定义集的范围值。

为此,您通常需要一个控制流图和跨基本块的传递函数。我想您可以以类似的方式处理到达定义图。

然后,您将需要跨过程范围传播以跨代码推送范围。

【讨论】:

    【解决方案2】:

    这是您所说的一个非常普遍的问题。达到定义与此没有太大关系。全球价值编号显然是您想要的,但从您的描述中很难分辨。尝试使用带有更详细问题说明的 Soot 邮件列表。

    【讨论】:

      猜你喜欢
      • 2015-01-27
      • 2022-11-10
      • 2012-04-26
      • 2014-06-20
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多