软件分析-过程间分析
过程间分析
寻找可能被调用的方法
Dispatch(c,m) c是类,m是方法
两种返回值
- c.m
- c’.m(c’是c的父类,当然如果这个父类也没有method方法,还会继续往上找父类的父类)
special call对应唯一方法,virtual call会调用dispatch
Resolve(cs)
比较tricky的virtual,对c和c的所有子类都采用dispatch,子类包括直接子类和间接子类,所以会一直延伸到树的叶子结点
java编译出的字节码可以判断这三种call方法
CHA
举个🌰
c没有子类,所以就返回自己的foo方法
a自己有foo会返回,再往下还会找子类的foo,所以cd也加进去了
b自己没有foo,但其父类A有foo,所以dispatch(b,foo)会返回A.foo(),且子类C、D的也会加进去
暴露的漏洞,当规定了b就是B对象时调用b.foo()时其实不会调用C.foo(),D.foo()
所以CHA不太准
特点
快速:只看继承树
不准
应用场景:ide函数方法提示
调用图
有向图
构建
RM:存储可达方法
WL:存储方法
CG:调用图
过程间控制流图–ICFG
过程间数据流分析
常量传播
与之前类似,常量有重定义的情况会kill掉(比如b=ten()那里)
- 标题: 软件分析-过程间分析
- 作者: Sl0th
- 创建于 : 2023-09-23 12:26:05
- 更新于 : 2024-11-11 18:23:06
- 链接: http://sl0th.top/2023/09/23/软件分析-过程间分析/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论