(智能合约实习)如何将PDG转换为SDG?

162 阅读2分钟

从PDG转换为SDG

什么是SDG?

SDG(System Dependence Graph)是一种扩展的图结构,用于表示程序或系统中的依赖关系。相较于PDG(Program Dependence Graph),SDG的层次更高,不仅涵盖单个函数或模块的依赖关系,还表示整个程序或系统的依赖结构。SDG特别适合用于大型软件的分析,因为它包括多个函数或模块之间的调用和数据依赖。

SDG的关键部分

SDG是在PDG的基础上扩展而来,主要包含以下几个关键部分:

  1. PDG子图:SDG包含多个PDG子图,每个子图表示一个函数或模块的内部依赖关系。SDG的整体结构由这些PDG子图组成。

  2. 调用依赖边:SDG引入调用边以表示函数之间的调用关系。调用边连接调用函数的节点和被调用函数的入口节点,表示控制从调用者传递到被调用者。

  3. 参数依赖边:用于在调用函数和被调用函数之间传递数据。参数依赖边包含:

    • 输入参数边:表示调用者将数据传递给被调用函数的参数。
    • 输出参数边:表示被调用函数的返回值或输出被传回到调用者。

如何将PDG转换为SDG

将PDG转换为SDG的步骤如下:

  1. 构建每个函数的PDG
    为程序中的每个函数或模块生成一个PDG子图,每个子图表示该函数内部的控制依赖和数据依赖关系。

  2. 添加调用边
    在调用函数的调用指令和被调用函数的入口节点之间添加调用边,表示控制流从调用者传递到被调用者。

  3. 添加参数依赖边
    分析函数调用关系,识别出输入和输出参数。在调用函数和被调用函数之间添加输入和输出参数依赖边,以表示数据的传递和返回。

SDG的作用

通过SDG,可以在跨函数的范围内进行程序切片,分析程序中指定变量或行为的依赖路径,找出所有可能影响或被影响的代码。这种依赖结构使得SDG非常适合用于复杂软件的分析、优化和调试。 转成后的示例图:

image.png