首页
/ AFL++ QEMU持久化模式中AFL_QEMU_PERSISTENT_EXITS机制解析

AFL++ QEMU持久化模式中AFL_QEMU_PERSISTENT_EXITS机制解析

2025-06-06 19:27:40作者:尤辰城Agatha

持久化模式的核心思想

AFL++的QEMU持久化模式是一种高效模糊测试技术,它通过在目标程序的特定代码段内循环执行,避免了传统模式下频繁fork子进程的开销。该模式的核心原理是在预设的起始地址(START)和结束地址之间建立执行循环,通过保存和恢复寄存器/内存状态实现多次测试的上下文隔离。

AFL_QEMU_PERSISTENT_EXITS的作用机制

当启用持久化模式时,AFL++会在QEMU模拟器中植入特殊处理逻辑。对于exit_group系统调用,存在两种处理方式:

  1. 默认行为(AFL_QEMU_PERSISTENT_EXITS=0):

    • 执行真正的exit_group系统调用
    • 完全终止当前线程并回收资源
    • 需要重新fork进程进行后续测试
    • 稳定性较高但执行效率相对较低
  2. 持久化行为(AFL_QEMU_PERSISTENT_EXITS=1):

    • 拦截exit_group系统调用
    • 不执行实际退出操作
    • 将程序计数器(PC)重置为持久化循环的起始地址
    • 维持当前线程继续执行
    • 显著提升执行效率但可能影响稳定性

技术实现细节

在QEMU模拟层,AFL++通过修改cpu_loop.c中的系统调用处理逻辑,对exit_group进行特殊处理。当检测到该调用时:

  1. 检查持久化模式标志位
  2. 若启用EXITS选项,则跳过实际系统调用
  3. 直接修改PC寄存器跳转至预设的START地址
  4. 维持当前进程/线程继续运行

这种设计使得目标程序中的exit()调用不再导致进程终止,而是成为持久化循环的"软复位"信号。

性能与稳定性的权衡

实际测试表明:

  • 禁用EXITS时(使用真实exit_group):

    • 稳定性可达97%
    • 执行速度约15次/秒
  • 启用EXITS时(拦截exit_group):

    • 稳定性降至93%
    • 执行速度提升至40+次/秒

这种差异源于:

  • 资源回收的完整性影响状态一致性
  • 线程持续运行可能积累微小状态偏差
  • 但避免了进程创建销毁的开销

最佳实践建议

  1. 对稳定性要求高的场景建议禁用EXITS
  2. 追求执行效率时可启用EXITS
  3. 可通过AFL_QEMU_PERSISTENT_MEM/GPR精细控制状态恢复
  4. 建议配合AFL_DEBUG_CHILD输出调试信息
  5. 重要目标应进行稳定性验证测试

通过理解这一机制,测试人员可以根据目标程序特性灵活配置,在模糊测试效率与结果可靠性之间取得最佳平衡。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
262
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
867
513
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
265
305
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
598
57
GitNextGitNext
基于可以运行在OpenHarmony的git,提供git客户端操作能力
ArkTS
10
3