处理方法调用时涉及到的行为:
保存现场,构造调用栈帧,传递参数,跳转到目标函数开始执行……目标函数执行完毕跳转回来,后从预定的位置取返回值(若需要),恢复现场,往下执行…
在静态分析中,更多的关注数据流,而非控制流。For Java,处理函数调用的数据流的过程:
1、确定目标方法
2、传递 receive object,经过 dispatch 之后,x.foo()
所调用的目标函数 foo
位于 类 T 里,继而把 x
所指的对象传递给 this
。
3、传递参数
4、传返回值
栈帧(stack frame)中存储了函数参数、返回地址、保存的寄存器、局部变量,因此完整的栈结构可能如下所示: