比较一与多——解决函数内联下的 Binary2source 函数匹配
软件工程
2022-10-28 v1
摘要
Binary2source 函数匹配是许多安全应用(包括软件成分分析,Software Component Analysis, SCA)的一项基础任务。现有的 binary2source 匹配工作采用了“1 对 1”机制,即一个二进制函数与一个源函数匹配。然而,我们发现由于函数内联的存在,这种映射可能是“1 对 n”的(一个查询二进制函数映射多个源函数)。为了在函数内联下进行 binary2source 函数匹配,我们提出了一种名为 O2NMatcher 的方法,以生成源函数集(Source Function Sets, SFSs)作为具有内联的二进制函数的匹配目标。我们首先提出了一个名为 ECOCCJ48 的模型用于内联调用点预测。为了训练这个模型,我们利用可编译的开源软件(OSS)生成了一个带有标记调用点(是否内联)的数据集,从调用点提取了若干特征,并通过检查不同编译之间的内联相关性设计了一个基于编译器优化的多标签分类器。然后,我们使用该模型预测未编译 OSS 项目中调用点的标签(无需编译),并获得这些项目的带标记函数调用图。接下来,我们将 SFSs 的构建视为子树生成问题,并设计根节点选择和边扩展规则以自动构建 SFSs。最后,这些 SFSs 将被添加到源函数语料库中,并与具有内联的二进制函数进行比较。我们进行了多项实验来评估 O2NMatcher 的有效性,结果表明我们的方法将现有工作的性能提高了 6%,并超越了所有 SOTA 工作。
引用
@article{arxiv.2210.15159,
title = {Comparing One with Many -- Solving Binary2source Function Matching Under Function Inlining},
author = {Ang Jia and Ming Fan and Xi Xu and Wuxia Jin and Haijun Wang and Qiyi Tang and Sen Nie and Shi Wu and Ting Liu},
journal= {arXiv preprint arXiv:2210.15159},
year = {2022}
}