Intro

0x00 Resource

Static Program Analysis | Tai-e (pascal-lab.net)

https://www.bilibili.com/video/BV1b7411K7P4

NOTEs Are Taken From Online Shared Course Static Program Analysis conducted by Teacher Yue Li and Tian Tan in NJU. Here I appreciate these two teachers for your selfless sharing. 😭

0x01 Intro

In the last decade, the language cores had few changes, but the programs became significantly larger and more complicated. To ensure the reliability, security, and other promises of large-scale and complex programs become a challenge.

Programming Languages(PL)can not live without Program analysis

Why Need Static Analysis:

  • Program Reliability

    Null pointer dereference、memory leak(malloc without free)

  • Program Security

    Private information leak、injection attack

  • Compiler Optimization

    Dead code elimination、code motion

  • Program Understanding

    IDE call hierarchy、type indication

Static analysis analyzes a program P to reason about its behaviors and determines whether it satisfies some properties before running P

Rice's Theorem:

Any non-trivial property of the behavior of programs in a r.e. language is undecidable

r.e. (recursively enumerable) = recognizable by a Turing-machine

A property is trivial if either it is not satisfied by any r.e. language, or if it is satisfied by all r.e. languages; otherwise it is non-trivial.

non-trivial properties ≈ the properties related with run-time behaviors of programs

So there is no perfect static analysis strategy

  • Sound ≈ 误报

  • Complete ≈ 漏报

But we can make some compromises to reach a useful static analysis

  • Compromise soundness (false negatives)

  • Compromise completeness (false positives)

Mostly compromising completeness: Sound but not fully-precise static analysis

Static Analysis: ensure (or get close to) soundness, while making good trade-offs between analysis precision and analysis speed

How to Do Static Analysis:

  • Abstraction

  • Over-approximation

    • Transfer functions:

      • define how to evaluate different program statements on abstract values.

      • defined according to “analysis problem” and the “semantics” of different program statements

    • Control flows

      • flow merging

Last updated