← 最新论文
🤖 machine learning

Pretraining on Call Graphs: When Binary Analysis Tasks Profit From Context

本文研究了将调用图上下文集成到二进制函数嵌入中如何提高鲁棒性并使命名空间相关函数等上下文依赖型任务受益,同时揭示了此类增强并不普遍泛化至下游任务,甚至可能在语义性能与语法性能之间产生权衡。

原作者: Samuel Valenzuela, Johannes Kinder

发布于 2026-08-04
📖 1 分钟阅读☕ 轻松阅读

原作者: Samuel Valenzuela, Johannes Kinder

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你是一名试图破解谜题的侦探,但你手中的线索全是不断变化的秘密代码。这就是二进制代码分析的世界。当一个计算机程序被编译时,它会变成一段机器指令流,看起来与原始的人类可读代码完全不同。这就像是把一个美味的蛋糕烤好后,试图仅通过品尝碎屑来推导出的食谱。挑战在于,两个不同的烘焙师可以使用略微不同的原料或步骤做出完全相同的蛋糕,而最终成品尝起来却是一模一样的。在数字世界中,这意味着两段代码在表面上可能看起来完全不同,但执行的功能却完全相同。

为了破解这些代码,科学家们使用机器学习来创建“嵌入”(embeddings)。把嵌入想象成一张独特的身份证或指纹。如果两张指纹匹配,那么这段代码很可能在做同样的事情。通常,这些身份证是通过孤立地观察一个函数(程序中的一个小任务)来制作的。但如果给侦探一张整个社区的地图会怎样呢?在编程中,这张地图被称为调用图(call graph),它展示了哪些函数调用了其他函数。核心问题在于:观察这个“社区”是能帮助我们更好地识别嫌疑人,还是仅仅用过多的噪音干扰了侦探?

这篇题为《在调用图上进行预训练:何时二进制分析任务能从上下文获益》(Pretraining on Call Graphs: When Binary Analysis Tasks Profit From Context)的论文,正是深入探讨了这个问题。研究人员 Samuel Valenzuela 和 Johannes Kinder 想要观察添加“社区上下文”(即调用图)是否真的能让侦探变得更聪明。他们采用了两个现有的最聪明的代码侦探(称为 CLAP 和 jTrans),并利用一种特殊的 AI 类型——图神经网络(GNN),教它们如何观察调用图。他们将这些具备上下文感知能力的侦探应用于三项不同的工作:寻找匹配的代码、猜测函数的名称,以及确定构建该代码时使用了哪些编译器设置。

以下是他们的发现,其中包含了一个情节转折。当目标是寻找匹配的代码(一项被称为“二进制代码相似性检测”的任务)时,具备上下文感知能力的侦达表现得非常出色。通过观察调用图,它们能够发现原始侦探错过的匹配项,尤其是在代码规模巨大或复杂的情况下。例如,当调用图拥有大约 64 个节点时,原始侦探开始感到迷茫,但新的侦探却依然保持冷静。

然而,当侦探们尝试执行其他任务时,故事发生了急转弯。当研究人员要求它们猜测函数的名称(一项语义任务)时,结果褒贬不一。虽然复杂的图神经网络侦探表现得更差了,但一种仅仅对邻域信息进行平均处理的简单方法,其表现却与原始侦探持平,甚至更好。事实证明,训练 AI 成为“寻找匹配”的大师,并不一定能帮助它正确命名事物,而且复杂的模型可能会让这项任务变得过于复杂。

更有趣的是,当任务是识别技术细节(例如使用了哪种编译器优化级别,即一项句法任务)时,结果取决于所使用的方法。复杂的图神经网络侦探表现不佳,且随着上下文信息的增加,表现反而越来越差。然而,简单的平均模型在获得更大的调用图时,实际上在识别这些技术细节方面做得更好。这表明,虽然专注于大局观(社区整体)的复杂模型可能会忽略微小的技术裂缝,但通过简单地观察整个社区,可以有效地聚合这些底层的技术模式。

研究人员还发现,这种“社区地图”对并非所有人都有同等的帮助。对于那些属于更大群体或命名空间(如工具库)的一部分的函数,它效果显著;但对于那些仅仅在执行自身独立逻辑的函数,它的帮助并不大。事实上,这项研究表明,如果你想让你的 AI 擅长识别技术细节,你可能实际上需要使用一种简单的平均方法,而不是复杂的模型,因为复杂的模型往往会模糊这些句法任务的界限。

简而言之,这篇论文表明,虽然通过引入调用图上下文可以使二进制代码分析在寻找相似代码方面更加稳健,但这也带来了权衡。它似乎模糊了其他任务的界限,使得复杂的 AI 在命名函数或识别技术细节时变得不够精确,尽管简单的平均方法有时可以在这些方面有所提升。作者总结道,这里存在一种微妙的平衡:你无法轻易地同时拥有最好的两种特性。如果你训练模型去理解函数之间如何相互通信的大局,它可能会停止关注那些对于其他类型分析至关重要的微小技术细节。这并非失败,而是一种对代码分析新规则的发现:有时,了解你的邻居有助于你找到匹配项,但它也可能让你忘记自己是谁——除非你知道如何以简单的方式去观察这个社区。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →