预计程序崩溃

时间:2011-05-12 07:45:28

标签: debugging crash static-analysis machine-code

我正在开发一个程序,该程序应该能够判断我在计算机上运行的程序是否会崩溃。

据推测,可以读取机器代码,构建潜在代码路径的模型,在标准和边界条件下测试行为的每个代码路径,绘制导致未处理异常的条件,然后跟踪所有这些步骤向后生成所需的设置输入和条件,以触发特殊的代码路径。这就像使用模糊调试器,只是更有条理。当然这是很多工作,但它应该在现代硬件上很快。

一位同事说,我想要做的事情根本不可能。这对我来说似乎有点极端。鉴于摩尔的技术发展规律曲线,无法实现的计算能力最终将成为现实。建议这样的事情永远不会不可能似乎有点夸大其辞。

为什么不能这样做?

3 个答案:

答案 0 :(得分:2)

这是一个程序:

accept integer i greater than 2
loop with k from 2 to 2*i
  is k prime?
    is 2*i-k prime?
      exit safely
end loop
do something nasty.

如果您追踪导致此程序执行某些令人讨厌的输入,则您已解决Goldbach's conjecture。您可以获得菲尔兹奖章以及诺贝尔奖。

这就是说,可以验证某些程序没有做任何令人讨厌的事情。我和其他人正在研究a framework in which you can do just that, using various techniques。一些例子:

This compression library could exhibit a memory error with input size 20, output size 40, but now it won't.

This binary search could fail, but now it won't.

答案 1 :(得分:0)

这是计算和数学的圣杯之一,被称为Entscheidungsproblem。你不会解决它。两个领域中最聪明的人都花了很多年时间,并证明它无法解决。当nbt和Pascal Cuoq说你赢得诺贝尔和菲尔兹这样做的时候,他们真的就是这个意思。

答案 2 :(得分:0)

  

据推测,可以读取机器代码,构建潜在代码路径的模型,在标准和边界条件下测试行为的每个代码路径,绘制导致未处理异常的条件,然后跟踪所有这些步骤向后生成所需的设置输入和条件,以触发特殊的代码路径。

是的,尽管理论人士说,这是可能的。有多家公司销售的产品与您所描述的完全相同,其中包括Vericode,Coverity,Fortify,Klocwork和Grammatech。

理论上说这是不可能的,假设你想要soundcomplete的东西。在实践中,只要您的误报率不是太差,您就可以放弃稳健性和完整性,并且您将有客户排队购买您的产品。

一旦你失去稳健性和完整性,不可能性定理就不再适用,你会进入更像工程而不是理论的东西。

编辑,Alex的评论
我将采用数学家的捷径,并说由于最初的问题是“有可能”,几种可行的商业产品的存在证明了答案是肯定的。使用商业软件可能产生的经济依赖性超出了原始问题的范围。