# 从一个例子说起, **任务:给定这样一段代码,假设我们想分析出这段代码中,每个数值型变量和表达式的符号,即正数,负数或0.** 此外,还有可能出现两种情况就是: 1.我们无法分析出结果,即我们无法确定符号,用(?)表示: 2.有些表达式的值并不是一个数字(例如,有可能是个指针)或者在执行的过程中没有被赋值(有可能是因为对于给定的输入,没有执行到,unreachable),用(⊥)表示. 因此,对于每一个变量或者是表达式,我们会有5种结果(这里将其表征成"格"的形式): (?)可能的…
Regarding correctness, programmers routinely use testing to gain confidence that their programs works as intended, but as famously stated by Dijkstra: “Program testing can be used to show the presence of bugs, but never to show their absence.” Ideall…
类型分析,个人理解就是(通过静态分析技术)分析出代码中,哪些地方只能是某种或某几种数据类型,这是一种约束.   例如,给定一个程序: 其中,我们可以很直接地得到一些约束: 最后,经过简化可以得到: 对于给定的变量类型,如果他们不符合这个约束,则说明,他们是不合法的. 那么,怎么去提取以及维护这些约束呢? 采用一种"并查集"的结构:一个有向图,每个节点有一条边指向父节点(父节点则指向自己).如果两个节点具有相同的父节点,那么,这个两节点就认为是等价的,即含有相同的数据类型. 以下是并查集…
  (a) an if-then-else (b) a while loop (c) a natural loop with two exits, e.g. while with an if...break in the middle; non-structured but reducible (d) an irreducible CFG: a loop with two entry points, e.g. goto into a while or for loop   控制流图是代码的一种表…
抽象语法树:AbstractSyntaxTrees 定义(wiki): 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码.树上的每个节点都表示源代码中的一种结构.之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节.比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现:而类似于if-condition-then这样的条件跳转语句…
一.Programming Languages体系 静态程序分析是编程语言中应用层面下的一个细分领域,它是一个非常重要的核心内容. 在理论部分,考虑的是如何设计一个语言的语法和语义,如何设计语言的类型系统等等问题.在过去十年中,语言核心几乎没有变化 有了语言的语法.语义和类型系统之后,我们需要支撑语言的运行.因此,在环境部分,需要考虑如何为运行中的程序提供运行时环境--如何设计编译器,在运行时需要怎样的支持(如内存的分配管理)等等.语言承载环境处于一个缓慢提升的阶段,主要集中在硬件设备以及高性能…
https://www.checkmarx.com/2014/11/13/the-ultimate-list-of-open-source-static-code-analysis-security-tools/ Doing security the right way demands an army – of developers, security teams, and the tools that each uses to help create and maintain secure c…
https://www.softwaretestinghelp.com/tools/top-40-static-code-analysis-tools/ In this article, I have summarised some of the top static code analysis tools. Can we ever imagine sitting back and manually reading each line of codes to find flaws? To eas…
静态时序分析(static timing analysis,STA)会检测所有可能的路径来查找设计中是否存在时序违规(timing violation).但STA只会去分析合适的时序,而不去管逻辑操作的正确性. 其实每一个设计的目的都相同,使用Design Compiler和IC Compile来得到最快的速度,最小的面积和最少的耗能.根据设计者提供的约束,这些工具会在面积,速度和耗能上做出权衡. 更深层的来看,STA一直都寻找一个问题的答案 : 在所有条件下,当时钟沿到达时,数据会正确地在每个…
此博文依据 特权同学在电子发烧友上的讲座PPT进行整理而成. static timing analysis   静态时序分析基础 过约束:有不必要的约束,或者是约束不能再某一情况下满足.——约束过头了 欠约束:有些必要的约束条件没有附加到约束中. 时钟周期  Tclk 占空比  = Thigh/Tclk 建立时间 Tsu  与保持时间Th.数据必须在 Tsu + Th时间内稳定 寄存器到寄存器(reg  to  reg )路径 pin  to reg reg  to  pin reg  to r…