【问题标题】:Static analysis for constant values常量值的静态分析
【发布时间】:2015-01-27 12:02:07
【问题描述】:

如果我理解正确的话,静态分析可以猜测一个变量可以有什么值,并推断出,例如,控制流图中的哪条路径永远不会被执行。

我有一个常量字符串 CStr 数组。 GetValue 方法获取参数中的索引并进行一些计算以找到 CStr 数组中的实际索引并返回指向该索引的 const 字符串。

编辑:实际索引对于给定 GetValue 的每个参数都是唯一且恒定的

静态分析可以猜测 GetValue(x) 会有一个常数值吗?如果是,是怎么做的?

【问题讨论】:

    标签: c++ c static analysis


    【解决方案1】:

    “静态分析能猜出GetValue(x)会有一个常数值吗?”

    这完全取决于您的静态代码分析工具的功能和质量。
    从理论上可以检测到,是的。


    如果您的意思是编译器可以推断出关于常量表达式的内容,那还取决于编译器的实际实现。

    您可以给出的最佳提示是使用 constexpr 关键字,例如

     constexpr int GetValue(int x);
    

    “如果是,是怎么做到的?”

    这是一个非常广泛的领域,在这里很难给出简明的答案。
    基本上,静态代码分析工具会跟踪特定函数的调用引用。如果这些函数的结果可以推断为在编译时指定的值(例如由于静态初始化),则调用函数的访问地址的实际有效大小/索引是已知的,并且可以标记为问题,如果越界了。

    【讨论】:

    • 我实际上对实现这样的检测很感兴趣,您可以给我任何技术名称吗?
    • @Kelvyne Boah,您实际上指的是问题的最后一部分“如果是,它是如何完成的?”,这是一个过于宽泛的问题在这里回答。不过,在从头开始之前,您可能有兴趣扩展现有的 FOSS 工具,例如 Clang Static Analyzercppcheck
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    相关资源
    最近更新 更多