gpt4 book ai didi

security - 静态分析无法捕获的问题子集是什么?

转载 作者:行者123 更新时间:2023-12-04 15:57:48 24 4
gpt4 key购买 nike

我试图了解静态分析和动态分析之间的区别,目的是程序流执行,检测安全漏洞。

很明显,动态分析的主要弱点是它无法探索程序可能进入的所有可能状态,因为它依赖于使用一组特定输入实际运行程序。

然而,静态分析似乎对所有可能的程序状态进行推理,所以我无法想象静态分析可能会失败的场景,即使我确信这样的场景确实存在。我看过的大部分引用资料似乎都含糊地说“抽象状态分析”不如动态分析可以提供的精确,但这对我来说太蓬松了。

任何人都可以通过具体示例提供简单的解释,说明静态分析失败而需要动态分析的地方?

最佳答案

对于给定 Turing complete 的所有程序,静态分析不可能是完整的。输入格式(这包括几乎所有的编程语言),因为通常无法确定一段代码是否曾经被执行过:您无法确定它之前的代码是否停止——即完成执行(如果它进入无限循环) ,那么任何超出它的“问题”都是虚假的,因为它无法到达)——这个问题被称为 halting problem .

但是,原则上,如果您还允许分析输出实际不存在的“问题”,则可以找到所有可能的问题。这几乎是所有静态分析工具所做的 - 大量的工程工作用于最大限度地减少他们报告的错误问题的数量。

此外,值得注意的是,一些状态探索系统本质上确实为每个状态执行程序(如果状态变得等效,通常会停止新的探索)——然而,许多程序具有不切实际的大输入状态空间(考虑任何采用文本格式的程序)输入!)使他们几乎不可能完全探索所有状态。

关于security - 静态分析无法捕获的问题子集是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101853/

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