Jellyfin 如何搭建 AFL++ 与 SharpFuzz 环境并运行模糊测试用例?

发布时间:2026/11/4 6:40:33

Jellyfin 如何搭建 AFL++ 与 SharpFuzz 环境并运行模糊测试用例? Jellyfin 如何搭建 AFL 与 SharpFuzz 环境并运行模糊测试用例【免费下载链接】jellyfinThe Free Software Media System - Server Backend API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfinJellyfin 仓库的fuzz/目录下内置了两个基于 SharpFuzz 的模糊测试工程用来对Jellyfin.Api与Emby.Server.Implementations中的特定函数做 AFL 驱动的模糊测试。本文按 fuzz/README.md 的流程说明如何安装 AFL 与 SharpFuzz 工具、选择仓库已有的模糊测试用例并实际运行以及如何判断运行是否按预期进行。仓库中已有哪些模糊测试用例两个 fuzz 工程各提供一组入口用例名在 Program.cs 与 Program.cs 的switch分支中定义fuzz.sh的第一个参数就是这些用例名工程目录可用用例名被测对象fuzz/Jellyfin.Api.FuzzUrlDecodeQueryFeatureUrlDecodeQueryFeature 中间件fuzz/Emby.Server.Implementations.FuzzPathExtensions.TryReplaceSubPathPathExtensions.TryReplaceSubPathfuzz/Emby.Server.Implementations.FuzzSqliteItemRepository.ItemImageInfoFromValueStringSqliteItemRepository.ItemImageInfoFromValueString每个用例在对应工程的Testcases/用例名/下带有种子输入文件如 test1.txt例如UrlDecodeQueryFeature的种子是一段 URL 编码字符串a%3D1%26b%3D2%26c%3D3。环境前提两个 fuzz 工程均面向net10.0见 Jellyfin.Api.Fuzz.csproj且 global.json 固定要求 .NET SDK10.0.0rollForward: latestMinor因此运行环境需要 .NET 10 SDK。仓库通过 Directory.Packages.props 统一管理SharpFuzz包版本2.3.0构建 fuzz 工程时会自动还原。AFL 需要从源码编译安装使用make与 root 权限sudo。第一步安装 AFL按 fuzz/README.md 的 Setup 说明执行git clone https://github.com/AFLplusplus/AFLplusplus cd AFLplusplus make all sudo make install注意sudo make install会以管理员权限把 AFL 安装到系统目录含afl-fuzz等命令这是一次影响系统环境的操作如果当前账号没有 sudo 权限需要先向环境管理员申请或改用具备权限的机器。第二步安装 SharpFuzz.CommandLine 全局工具dotnet tool install --global SharpFuzz.CommandLine这个全局工具提供sharpfuzz命令fuzz 脚本用它对目标程序集做插桩。第三步进入目标 fuzz 工程目录并运行脚本fuzz/README.md 说明在对应工程的目录中运行fuzz.sh并传入要执行的模糊测试用例名。以Jellyfin.Api.Fuzz的UrlDecodeQueryFeature为例从仓库根目录切入后执行cd fuzz/Jellyfin.Api.Fuzz sh fuzz.sh UrlDecodeQueryFeature其他用例同理在 fuzz/Emby.Server.Implementations.Fuzz 目录下运行sh fuzz.sh PathExtensions.TryReplaceSubPath # 或 sh fuzz.sh SqliteItemRepository.ItemImageInfoFromValueString用例名必须与Program.cs中switch分支的字符串完全一致传入未知名称时进程会抛出ArgumentException: Unknown fuzzing function: 你传入的名称。脚本内部做了哪些事以 fuzz/Jellyfin.Api.Fuzz/fuzz.sh 为例脚本内容很短执行顺序为dotnet build -c Release ../../Jellyfin.Api/Jellyfin.Api.csproj --output bin sharpfuzz bin/Jellyfin.Api.dll cp bin/Jellyfin.Api.dll . dotnet build mkdir -p Findings AFL_SKIP_BIN_CHECK1 afl-fuzz -i Testcases/$1 -o Findings/$1 -t 5000 ./bin/Debug/net10.0/Jellyfin.Api.Fuzz $1第一行Release 构建被测工程Jellyfin.Api输出到脚本同级的bin目录。第二行用sharpfuzz对bin/Jellyfin.Api.dll插桩生成可供 AFL 在进程外调用的版本。第三行把插桩后的Jellyfin.Api.dll复制回工程目录。这一步是必要的因为 Jellyfin.Api.Fuzz.csproj 通过HintPathJellyfin.Api.dll/HintPath本地引用工程目录下的Jellyfin.Api.dll复制后 fuzz 工程才会链接到插桩版本。第四行构建 fuzz 工程本身Debug。最后一行启动afl-fuzz种子输入目录为Testcases/用例名结果输出到Findings/用例名-t 5000是脚本为单次执行设置的超时参数AFL_SKIP_BIN_CHECK1是脚本设置的 AFL 环境变量用于跳过其对二进制的检查。Emby.Server.Implementations.Fuzz的 fuzz.sh 结构完全相同只是构建对象换成了Emby.Server.Implementations工程、harness 路径换成了./bin/Debug/net10.0/Emby.Server.Implementations.Fuzz。脚本开头有set -e任何一步失败例如sharpfuzz未安装、目标工程构建失败都会立即中止所以“脚本一路跑完并进入afl-fuzz前台运行”本身就说明前几步成功。如何判断运行结果afl-fuzz在前台持续运行把发现的用例写入Findings/用例名/目录脚本不会自动生成该目录之外的其他产物。传错用例名时进程会直接抛出上面提到的ArgumentException这是脚本流程中最快的失败信号。种子输入需要符合各用例期望的格式PathExtensions.TryReplaceSubPath的输入按:切分且必须恰好得到 3 段见 Program.cs 中data.Split(:)的判断不满足时该输入会被跳过仓库自带的种子 test1.txt 中夹带了原作者的本地路径/home/bond/dev/jellyfin/只作为种子示例存在。边界与限制仓库当前只提供上表列出的三个用例harness 中没有的函数无法直接模糊测试需要自行在对应工程的Program.cs中新增分支。运行依赖 .NET 10 SDKglobal.json在低版本 SDK 上构建会直接失败。本文只覆盖fuzz/README.md给出的安装与运行流程未涉及如何向 AFL 添加自定义编译器选项或使用托管版 AFL 编译器仓库文档中没有对应说明。【免费下载链接】jellyfinThe Free Software Media System - Server Backend API项目地址: https://gitcode.com/GitHub_Trending/je/jellyfin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/26 19:09:48

Edge浏览器变干净指南:告别信息流弹窗,优化内存与性能

说 Edge 能变得很干净,很多人第一反应是不信。毕竟默认状态下的 Edge 实在有点“爱凑热闹”:打开新标签页就是整屏信息流,右下角偶尔冒出购物比价提示,侧边栏还总想给你塞点东西。但把设置项逐个翻一遍、把启动项和扩展列表清一遍…

2026/11/3 0:43:29

运动学模型与LQR路径跟踪:从原理推导到仿真调参实战

做自动驾驶横向控制这几年,我最大的体会是:很多人一上来就上动力学模型、上MPC,结果连最基本的运动学LQR都没调明白。不是说高级方法不好,而是运动学模型加LQR这套组合,在低速、结构化道路场景下,性价比高得…

2026/11/4 10:35:02

JavaScript模块化:从CommonJS到ES Modules的深度解析

1. 模块化发展背景与核心概念JavaScript模块化的发展历程可以看作是一部解决代码组织问题的进化史。早期的JS代码都是直接写在script标签里,随着前端项目越来越复杂,这种简单粗暴的方式带来了全局污染、依赖混乱等问题。于是社区先后出现了多种模块化方案…

2026/11/4 10:35:02

POJ基础题单AC指南:判题规则、六类模板与易错点

简介:面向ACM算法入门与课程练习的北大POJ题解代码包,覆盖1000至1008、1011至1014等一批基础题目,适合刚开始接触在线评测、需要对照参考实现来理解题意与边界处理的读者。压缩包共157个文件,其中156个cpp源码和1个txt说明文件&am…

2026/11/4 10:35:02

ROS2高效学习路线与核心架构解析

1. ROS2学习路线全景解析作为机器人操作系统的最新迭代版本,ROS2在架构设计和功能特性上相比ROS1有着显著提升。对于刚接触ROS2的开发者而言,系统化的学习路径至关重要。我结合三年来的ROS2教学经验,总结出这条经过验证的高效学习路线&#x…

2026/11/4 10:35:02

PSM-NMF语音增强算法:原理与工程实践

1. 项目背景与核心价值 语音增强技术一直是音频信号处理领域的核心课题之一。在实际应用中,我们常常会遇到录音环境嘈杂、背景噪声干扰严重的情况——比如远程会议时键盘敲击声、车载语音系统中的引擎噪声、或是老旧录音档案中的磁带底噪。传统降噪方法如谱减法、维…

2026/11/4 10:35:02

数据质量管理办法:七维标准、三层组织与五步闭环落地指南

简介:《数据质量管理办法》是一份面向数据治理、数据质量管理从业者及企业数据管理部门的制度参考文档,适合用于搭建数据质量管理制度框架、明确组织分工与规范问题闭环流程。文档围绕组织与职责、数据质量定义、质量发现、原因分析及整改等环节展开&…

2026/11/4 10:30:02

傅里叶变换与FFT在周期信号处理中的应用

1. 傅里叶变换的本质与周期信号处理 傅里叶变换(Fourier Transform)作为信号处理领域的基石工具,其核心思想是将时域信号分解为不同频率的正弦波叠加。快速傅里叶变换(FFT)则是其高效算法实现,计算复杂度从…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑