软件分析-过程间分析

Sl0th Lv4

过程间分析

寻找可能被调用的方法

Dispatch(c,m) c是类,m是方法

两种返回值

  • c.m
  • c’.m(c’是c的父类,当然如果这个父类也没有method方法,还会继续往上找父类的父类)

special call对应唯一方法,virtual call会调用dispatch

Resolve(cs)

image-20231017185458682
image-20231017185458682

比较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的也会加进去

image-20231017190308693
image-20231017190308693

暴露的漏洞,当规定了b就是B对象时调用b.foo()时其实不会调用C.foo(),D.foo()

所以CHA不太准

特点

快速:只看继承树

不准

应用场景:ide函数方法提示

image-20231017192938184
image-20231017192938184

调用图

有向图

构建

image-20231017193319093
image-20231017193319093

RM:存储可达方法

WL:存储方法

CG:调用图

过程间控制流图–ICFG

image-20231017194814707
image-20231017194814707

过程间数据流分析

常量传播

image-20231017201825006
image-20231017201825006

与之前类似,常量有重定义的情况会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 进行许可。
评论