asmsense:22.8万条x86-64函数数据,破解逆向工程标注难题

asmsense 发布 22.8 万条 x86-64 函数数据集并用 Qwen3-8B+LoRA 微调模型,透明列出数据缺口与评估难题。
asmsense 是一个面向剥离符号二进制函数自动命名与描述的开源项目,发布了包含 228,177 个 x86-64 函数的数据集,这些函数来自 341 个宽松许可的 C 项目,覆盖 -O0 到 -Os 优化级别,并附带由教师 LLM 生成的英/土双语描述。项目采用 Qwen3-8B 基座加 LoRA 微调完成命名与描述任务,但当前样本仅限 clang/Mach-O 编译产物。作者明确列出了数据缺口(缺少 ARM64/RISC-V/MIPS 架构、GCC/ELF 构建、中文描述、人工校验标签、Agent 轨迹和公开基准评估),并正在探索将流程转化为强化学习环境,同时担忧 token 级 F1 奖励可被通用函数名游戏。评估方面缺乏人类专家小组,依赖 LLM 自动检查存在循环论证风险。项目以透明和可复现为亮点,为二进制函数理解领域提供了可扩展的起点。
在逆向工程和二进制分析领域,为剥离符号(stripped)的函数自动命名和描述一直是个难题。最近,一个名为 asmsense 的开源项目发布了包含 228,177 个 x86-64 函数的全新数据集,并训练了一个小模型来攻克这一任务。

据项目作者在 Reddit 上的介绍,asmsense 并非简单地爬取现有二进制,而是自行编译了 341 个使用宽松许可证的 C 项目。这意味着每个函数都保留了真实的名称和源代码上下文,为监督学习提供了高质量的“源感知”标签。
数据集构成与核心特性
asmsense 的数据集目前包含 228,177 个函数,覆盖从 -O0 到 -Os 的多种优化级别。这种跨优化级别的设计,使得模型能够接触到不同编译阶段的代码形态,更贴近真实世界中的二进制多样性。
每个函数都附带了英文和土耳其语的描述,中文描述正在计划中。作者强调,描述是由能够看到 C 源代码的“教师 LLM”生成的,并且仅由另一个 LLM 对样本进行了检查,这在一定程度上限制了标签的绝对准确性,但为大规模数据提供了可行的折中方案。
代码和数据已在 GitHub 上开源,采用宽松许可,方便研究者复现和扩展。
模型方案:Qwen3-8B + LoRA
项目采用 Qwen3-8B 作为基座模型,并通过 LoRA 进行微调,以完成函数命名和描述生成的任务。这种组合在计算成本和性能之间取得了平衡,适合在资源有限的环境下进行实验。
作者坦言,模型目前主要针对 clang/Mach-O 在 macOS 上的编译结果,尚未覆盖 GCC/ELF 构建。这意味着数据集在平台覆盖上存在明显的偏斜,可能影响模型在 Linux 环境下的泛化能力。
LoRA(Low-Rank Adaptation)是一种参数高效微调技术,其核心思想是在预训练模型每层的权重矩阵旁注入低秩分解矩阵,训练时只更新这些新增的小参数,而冻结原模型权重。相比全参数微调,LoRA 显著降低了显存占用和计算成本,同时保持了接近全量微调的性能。Qwen3-8B 是通义千问广告系列的开源大语言模型,拥有 80 亿参数,具备较强的代码和推理能力。将 LoRA 应用于 Qwen3-8B,使得在单张或少数几张消费级 GPU 上即可完成针对汇编代码理解任务的适配,这解释了为何该项目能在资源有限的环境下快速迭代。
数据缺口:一张清晰的“缺什么”地图
asmsense 最值得称道的可能是它坦诚地列出了当前数据集的不足。作者在项目页面上用一页纸逐步说明了缺失的内容:
- 其他架构:ARM64、RISC-V、MIPS 等尚未纳入,目前仅限 x86-64。
- GCC/ELF 构建:目前所有样本均来自 clang/Mach-O,缺少 Linux 生态常见的 GCC 编译产物。
- 中文描述:多语言支持仍在规划中。
- 人工校验标签:当前标签仅经过 LLM 抽样检查,缺乏人类专家的全面审核。
- Agent 轨迹:未包含交互式分析过程的记录。
- 公开基准测试:尚未在 BinMetric、REBench、BinSum 和 DeBinVul 等基准上运行评估。
这种透明性对于后续研究者非常有价值,它明确指出了可以改进的方向,也避免了过度承诺。
强化学习环境的构想与挑战
作者正在考虑将整个数据处理流程转化为一个强化学习(RL)环境:编译、剥离符号、让模型命名函数,然后根据与真实名称的 token 级 F1 分数进行评分。
然而,作者也清醒地认识到这种奖励设计的缺陷:模型可以通过生成“get_data”之类的通用名称来获取部分分数,从而“游戏”奖励函数。他在帖子中向社区求助:“如果你在类似模糊目标上训练过,你是如何塑造奖励的?RL 是否击败了单纯的微调?”
这触及了二进制函数命名任务的一个核心难点:函数名的语义模糊性。同一个功能可能有多种合理的命名方式,而 token 级 F1 无法完全捕捉语义正确性。
token 级 F1 分数是一种常用的序列生成评价指标,它分别计算预测序列与真实序列在 token 层面的精确率(precision)和召回率(recall),再取调和平均。在函数命名场景中,它衡量的是模型生成的函数名与真实函数名在子词(subword)级别的重叠程度。然而,该指标无法区分语义等价但拼写不同的名称(如 get_data 与 fetch_data),也容易奖励那些包含高频通用词缀的输出。这正是作者担忧奖励可被“游戏”的技术根源:模型可能学会生成看似合理但缺乏信息量的通用名称,从而在不真正理解函数功能的情况下获得较高分数。
评估难题:没有人类小组怎么办?
作者提出的另一个关键问题是:如何在没有人类专家小组的情况下评估生成的描述质量?
目前,描述由教师 LLM 生成,并仅由另一个 LLM 抽样检查。这种自动化评估方式虽然可扩展,但存在循环论证的风险——LLM 评估 LLM 的输出,可能无法发现系统性错误。
对于离线运行的模型,数据缺口中的哪一项最为关键?作者本人也在寻求社区意见。从实际应用角度看,GCC/ELF 支持的缺失可能最为致命,因为大多数生产环境的二进制文件都是 ELF 格式。
循环论证风险在自动化评估中是一个经典问题:当评估者与被评估者同源(例如同属 LLM 家族)时,模型可能系统性地偏好自身或同类模型生成的输出,导致评估分数虚高,而无法反映真实质量。在 asmsense 的场景中,教师 LLM 生成描述、另一个 LLM 抽样检查,两者可能共享相似的训练数据分布和偏见,因此难以发现描述中的事实性错误或遗漏。缓解这一风险的常见做法包括引入人工评估子集、使用不同厂商的 LLM 作为裁判、以及设计基于源代码可验证属性的客观指标(如函数调用的 API 名称是否被正确提及)。
多源交叉验证与社区反馈
提一嘴,以上信息主要来自项目作者在 Reddit 上的单方面陈述,尚未看到独立的第三方验证。数据集的实际质量、模型的真实性能以及评估方法的有效性,都需要社区在使用中检验。
作者也坦诚地表示,自己在构建过程中使用了 LLM 来辅助写作和语法检查,因此可能存在小错误,并欢迎指正。这种开放态度有助于建立信任,但同时也提醒使用者对数据质量保持审慎。
对二进制分析领域的意义
尽管存在诸多不足,asmsense 的出现仍然不能忽视。它提供了一个可复现的、带有源代码级标签的大规模数据集,填补了二进制函数理解领域公开资源的空白。
更重要的是,作者明确列出了数据缺口和评估挑战,为后续研究指明了方向。无论是扩展架构支持、引入人工校验,还是设计更鲁棒的奖励函数,都有清晰的切入点。
对于从事逆向工程、恶意软件分析或二进制代码相似性检测的研究者来说,asmsense 是一个值得关注和贡献的起点。项目的开源性质也意味着社区可以共同推动其演进,逐步弥补当前的不足。
随着更多研究者的参与,我们或许能看到一个更全面、更可靠的二进制函数理解基准的诞生。
相关推荐

AI数字分身实战:用DOT自动追踪Bug与用户反馈
DOTS 团队工程师演示如何用 AI 数字分身 DOT 跨平台收集用户反馈、自动归类问题主题、开线程调查 Bug 根因并直接提交 PR,展示 AI 代理参与缺陷分诊的完整工作流与可审计设计。

晶体管为何不再扁平?从平面到环绕栅极的演进
晶体管从平面到FinFET再到环绕栅极的演进:为何栅极需要从三面包裹到四面环绕,以抑制短沟道效应和泄漏电流,延续摩尔定律。

蜂群思维=单个RL智能体?多臂老虎机等价性证明
一篇论文证明蜂群通过局部模仿进行的集体决策,在数学上等价于单智能体强化学习。N个盲目模仿者相当于N个并行环境采样,有效学习率为1/N。本文解读Maynard-Cross Learning算法的推导与影响。