首页
社区
课程
招聘
[原创]静态程序分析之过程间数据流分析(CHA构建-ICFG-EDGE)
发表于: 2025-10-19 17:54 2594

[原创]静态程序分析之过程间数据流分析(CHA构建-ICFG-EDGE)

2025-10-19 17:54
2594


大家好,我是TeddyBe4r,今天为大家带来CHA,ICFG和一些有关于过程间分析的内容。

大纲如下所示,该篇笔记主要解释 CHA 的构建算法,ICFG数据流分析方法,以及基础的 Call edge,Return edge,Call-to-Return edge 的一些概念和Transfer Node 在常量传播中的一些经典处理手法,详细精准的定义可以看图片中的内容,对于大白话方便理解的我在关键的地方都精炼成一句话方便大家理解。

Motivation

到目前位置我们学习的都是过程内分析的。我们一般假设都是 Safe-approximation
这样的话就会损失精度。为了提升精度我们需要进行过程间的数据流分析。

过程间分析就会顺着边来传递数据流。

为了更好的精度我们需要利用 call graph

调用图就是一个程序调用关系的表示,他是一个调用边的集合。

调用图的用途

调用图是一个非常重要的程序信息。

Static call

Special call

Virtual call (最难处理的)

Instruction

invoke static

invoke special

invoke interface

invoke virtual

Receiver Objects

NO

YES

YES

Target Methods

#Target Methods

1

1

>= 1(polymorphism)

Determinacy

complie-time

complie-time

runtime

对于OOP语言的调用处理最难的是虚方法。

对于虚方法而言通常是通过方法分发来进行操作的。该操作基于

可以通过设置Dispatch 函数来模仿这个动态分发的过程

值得注意的是这里的 m必须是一个非抽象的方法,如果c没有这个方法则需要往c的父类去寻找直到找到一个非抽象方法。这里我们辅佐以图来理解Dispatch的过程

DIspatch 例子

这里有一点值得注意的是 对于Special call的处理我们需要处理以下三种情况

一定要记住这里的T集合是包含当前类及其他的子类

给出一个例子帮助理解

值得注意的是对于 B b = ...; b.foo(); 做Dispatch 是包含A C D的因为 对B做Dispatch 的时候会

回溯到A类的 A.foo() 上面去。且一定记住CHA算法只考虑声明类型不考虑右值的实际类型

即便 B b = new B(); b.foo(); 也只和左值的类型有关。

经常会在IDE里面看到这种CHA方法。



本质上就是从入口方法开始递归的处理方法到方法的边,并且将这个边放到集合中去,直到没有一个新方法被发现。

例子

可以跟着该例子推导一下该算法。

在ICFG中有两种类型的边

ICFG = CFGs + call & return edges

ICFG例子

不过在这里我们需要注意,有了Call Edges和 Return Edges之后依旧需要保留原来基本块的CFG edges。

过程间常量传播分析例子


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-10-19 17:58 被TeddyBe4r编辑 ,原因: 更改标题,使其观感更好
收藏
免费 9
支持
分享
最新回复 (7)
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
看看
2025-10-23 15:13
0
雪    币: 1568
活跃值: (2026)
能力值: ( LV12,RANK:229 )
在线值:
发帖
回帖
粉丝
3

尝试溯源了一下文章内容,参考文献应该是
南京大学 《软件分析》课程07 过程间分析(Interprocedural Analysis)
1acK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4q4I4i4K6g2X3y4o6p5H3y4o6R3^5x3e0g2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0p5I4z5e0M7%4x3o6M7#2y4H3`.`.

最后于 2025-10-28 01:12 被zZhouQing编辑 ,原因:
2025-10-28 01:10
0
雪    币: 6173
活跃值: (2732)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
4
zZhouQing 尝试溯源了一下文章内容,参考文献应该是南京大学 《软件分析》课程07 过程间分析(Interprocedural Analysis)https:/ ...
是南大的软件分析的课程记录所以大家应该都差不太多。
2025-10-28 01:13
0
雪    币: 1568
活跃值: (2026)
能力值: ( LV12,RANK:229 )
在线值:
发帖
回帖
粉丝
5
TeddyBe4r 是南大的软件分析的课程记录所以大家应该都差不太多。

好的,似乎是公开课,看着不错。

南京大学《软件分析》课程07(Interprocedural Analysis)
0d0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2T1K9h3I4A6j5X3W2D9K9g2)9J5k6h3y4G2L8g2)9J5c8Y4k6A6k6r3g2G2i4K6u0r3b7W2j5I4c8#2p5@1P5e0q4f1y4%4A6E0

最后于 2025-10-28 01:20 被zZhouQing编辑 ,原因:
2025-10-28 01:20
0
雪    币: 1559
活跃值: (2972)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
6
mark
2025-12-9 23:15
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
学习下
2025-12-18 11:11
0
雪    币: 207
活跃值: (618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习下
2025-12-22 08:48
0
游客
登录 | 注册 方可回帖
返回