2.13 Huawei Horizontal Project Weekly Meeting

1. Forward slicing and backward slicing of the program

A forward slice identifies those statements that are affected by a particular statement.

Forward slices identify those statements that are affected by a particular statement .

A backward slice identifies those statements that affect the computation of a particular statement.

Backward slices identify those statements that affect the computation of a particular statement.

Backward actually refers to going backwards , that is, to find in the previous code; forward actually refers to forward , that is, to find in the code that has not yet been executed.

Therefore, when doing impact domain analysis, we need to find the forward slice of the program instead of the backward slice.

2. Static program slicing

2.1 dg

GitHub address: mchalupa/dg

DG is a library containing various bits for program analysis. However, the main motivation of this library is program slicing. The library contains implementation of a pointer analysis, data dependence analysis, control dependence analysis, and an analysis of relations between values in LLVM bitcode. All of the analyses target LLVM bitcode, but most of them are written in a generic way, so they are not dependent on LLVM in particular.

Further, DG contains an implementation of dependence graphs and a static program slicer for LLVM bitcode. Some documentation can be found in the doc/ directory.

General description that can be referred to: DG: Analysis and Slicing of LLVM Bitcode
doc There are more detailed descriptions in the directory.

2.2 Symbiotic framework

GitHub address: staticafi/symbiotic

Symbiotic is an open-source framework for program analysis integrating instrumentation, static program slicing and various program analysis tools. Symbiotic is highly modular and most of its components are self-standing programs or LLVM passes that have their own repositories at https://github.com/staticafi.

It is an open source framework, mainly integrating various technologies, including LLVM, KLEE, etc.
It has a series of articles, the first of which should be: Symbiotic: Synergy of Instrumentation, Slicing, and Symbolic Execution (Competition Contribution) .

3. Dynamic Program Slicing

Don't consider using this method, but you can take a look at the dynamic slicing tool pmd implemented in Java .

Guess you like

Origin blog.csdn.net/weixin_45651194/article/details/129019155