Newtank

个人站

欢迎来到我的个人站~


指针分析(三)

目录

过程间指针分析

调用图

过程间的指针分析需要建立调用图。传统的CHA是根据声明类型来建立调用图,会引入大量的无用边。

通过指针分析可以构建比CHA更精确的调用图和指向关系。

规则

r = x.k(a1,...,an)

的规则为

\[o_i\in pt(x),m=Dispatch(o_i,k)\\ o_u\in pt(a_j),1\le j \le n\\ \underline{o_v\in pt(m_{ret})}\\ o_i\in pt(m_{this})\\ o_u\in pt(m_{pj}),1\le j \le n\\ o_v\in pt(r)\]

在调用的时侯,要做四件事情:

  • 根据$x$可能指向的对象和方法$k$得到调用的方法(集合)$m$
  • 为每个方法$m$传入$m$的this参数$m_{this}$
  • 为每个方法$m$传入第$j$个形参$m_{pj}$,值(集)为第$j$个实参的指向集合。同时在PFG中添加$a_j\rightarrow m_{pj}$的边
  • 将每个方法$m$的每个返回值$m_{ret}$加入r指向的对象集合,并在PFG中添加$r\leftarrow m_{ret}$的边

算法