Indirect Calls

2021.07.2

简介

C/C++程序通常使用函数指针来实现程序的动态行为,由函数指针触发的过程调用称为非直接调用。

非直接调用的存在方式:

研究意义

本次组会讨论的核心问题:识别非直接调用目标

更精准的全局调用流图有利于我们做那些事情?

研究现状

静态分析

动态分析

讨论

由于动态分析和基于指针分析的识别方法的局限性,目前学术界主要采用基于类型分析的方法来识别非直接调用的目标。

目前,主流的类型分析方法主要是通过添加一些限制,来提高识别的准确率,例如MLTA通过限制函数指针所在的结构类型来限制非直接调用目标的可取范围。

但是当前的类型分析识别方法能够利用的程序信息仍然比较贫乏,不能充分利用源代码中的信息来辅助类型分析,提高非直接调用目标识别的准确率。

例如,类型分析方法完全忽视了程序的数据流信息,虽然数据流分析的消耗比较大,但是如果用on-demand的数据流分析去辅助类型分析技术,是可以有效降低分析的误报率的。

本次组会内容下载链接