xuesu

Motivation

目的:处理method calls
方法:沿着interprocedural control-flow edges将数据流信息传播过去(一般是call/return edges)

Call graph construction

Call graph construction in Java

  • Class hierarchy analysis(CHA)
  • Rapid type analysis(RTA)
  • Variable type analysis(VTA)
  • Pointer analysis(k-CFA)
    这些方法的精度依次上升,效率当然随之下降。
    java的函数调用有4种: invokestatic, invokepspecial, invokeinterface和invokevirtual。接口和虚函数都牵扯到无法确定具体调用的是哪个方法这一问题。

Class hierarchy analysis(CHA)

处理invokevirtual:virtual call调用哪个方法与当前变量的类别(the type of the receiver object)和invokevirtual后面跟的函数签名(method signature at the call site)有关。

  • Signature = class type+ method name + descriptor
  • Descriptor= return type+ parameter types

根据superclass的关系,从子类一路向父类找,直到找到name和descriptor相同的方法,此时就认为调用了该方法。

IDEA中有内嵌CHA算法。

Interprocedural Control Flow Graph


Interprocedural Data-flow Analysis

需要注意作用域的问题,有些变量不再可访问。

分类:

技术点:

相关文章:

  • 2021-09-07
  • 2021-09-14
  • 2021-09-07
  • 2022-01-18
  • 2021-06-13
  • 2021-09-17
  • 2021-09-07
  • 2021-09-07
猜你喜欢
  • 2021-09-07
  • 2021-09-07
  • 2021-09-07
  • 2021-09-07
  • 2021-09-07
  • 2021-09-07
  • 2021-09-07
相关资源
相似解决方案