深入 SmartBugs 源码:从 CLI 参数到 Docker 任务调度的执行全流程
深入 SmartBugs 源码从 CLI 参数到 Docker 任务调度的执行全流程【免费下载链接】smartbugsSmartBugs: A Framework to Analyze Ethereum Smart Contracts项目地址: https://gitcode.com/gh_mirrors/smar/smartbugsSmartBugs 是一个开源的以太坊智能合约安全分析框架能够统一调度 Mythril、Slither、Oyente 等 30 分析工具。本文带你深入 SmartBugs 源码完整梳理从命令行参数解析、配置合并、任务组装到 Docker 容器并行调度的执行全流程帮助新手快速看懂框架内部运作机制。SmartBugs 执行全流程一张图看懂整体架构SmartBugs 的源码核心位于sb/包中整个执行链路可以浓缩为 6 个关键阶段┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ CLI 入口 │──▶│ 配置合并 │──▶│ 文件收集 │──▶│ 任务组装 │──▶│ 并行调度 │──▶│ 结果解析 │ │ cli.py │ │settings │ │smartbugs│ │smartbugs│ │analysis │ │parsing │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ ▼ ▼ Docker 执行 结果文件 docker.py result.*每个阶段各司其职sb/cli.py负责解析参数sb/settings.py负责配置合并sb/smartbugs.py负责文件收集与任务组装sb/analysis.py负责多进程调度sb/docker.py负责容器执行sb/parsing.py负责结果标准化。第一步SmartBugs 入口与 CLI 参数解析程序从哪里开始执行SmartBugs 的入口非常简洁无论是运行python -m sb还是直接执行smartbugs命令最终都会调用sb/cli.py中的main()函数# sb/__main__.py import sb.cli if __name__ __main__: sb.cli.main()真正干活的是sb/cli.py中的cli_args()函数它使用 Python 标准库argparse构建命令行解析器并把参数划分为四个分组逻辑非常清晰。四大参数分组速览输入选项input-t/--tools指定分析工具、-f/--files指定合约文件支持 glob 通配符和DIR:前缀、-c/--configuration指定配置文件、--main只分析同名合约、--runtime分析部署后的字节码而非部署代码执行选项execution--processes设置并行进程数、--timeout设置每个任务的超时秒数、--cpu-quota与--mem-limit限制 Docker 容器资源、--continue-on-errors出错后继续执行输出选项output--runid设置运行标识、--results指定结果目录、--json输出解析后的 JSON、--sarif额外输出 SARIF 格式、--quiet静默模式信息选项information-v/--version显示版本、--debug开启调试日志值得注意的是cli_args()中凡是值为None的参数都会被丢弃这正是命令行参数优先级最高这一设计的实现基础。第二步配置合并的优先级顺序与模板展开机制三级配置的合并顺序SmartBugs 的配置采用低优先级在前、高优先级在后的覆盖式合并在sb/cli.py的cli()函数中实现站点级配置site_cfg.yaml项目根目录用户级配置~/.smartbugs/cfg.yaml命令行-c指定的配置文件命令行直接传入的参数优先级最高freeze() 冻结与模板变量展开配置合并完成后sb/smartbugs.py的main()会调用settings.freeze()把所有模板变量一次性展开。默认的runid是${YEAR}${MONTH}${DAY}_${HOUR}${MIN}会自动替换成类似20260815_0840的时间戳结果目录默认模板为results/${TOOL}/${RUNID}/${FILENAME}其中的$TOOL、$FILENAME等变量则留到生成每个任务时再逐个替换相关实现见sb/settings.py的resultdir()方法。第三步工具加载与三种分析模式匹配SmartBugs 之所以能统一调度众多工具靠的是sb/tools.py的load()函数。每个工具在tools/工具名/config.yaml中声明自己的配置例如 Mythril 的配置就同时声明了solidity、bytecode、runtime三种模式。alias 别名机制有些工具目录只是别名比如tools/slither/config.yaml里只有一个alias: [slither-0.11.3]load()发现alias字段后会自动递归加载指向的真实工具配置这就是为什么你可以在命令行中写slither而无需关心具体版本。三种模式与文件类型的对应关系solidity模式分析.sol源码文件bytecode模式分析.hex部署字节码runtime模式分析.rt.hex运行时字节码或使用--runtime参数另外工具配置中的command和entrypoint是string.Template模板执行时会把$FILENAME、$TIMEOUT、$BIN、$MAIN等变量替换为实际值见sb/tools.py中的command()与entrypoint()方法。第四步文件收集与任务组装的完整过程collect_files匹配合约文件sb/smartbugs.py的collect_files()用glob递归匹配文件模式只接受.sol和.hex后缀还支持.sbd清单文件——里面每一行是一个文件路径可以批量列出待分析合约。collect_tasks文件 × 工具 任务任务组装是框架的核心逻辑简单说就是每个文件 × 每个匹配模式的分析工具 一个任务solc 版本匹配对于.sol文件先通过sb/solidity.py提取 pragma 版本约束再用sb/semantic_version.py匹配可用的编译器版本匹配不到会直接报错结果目录去重多个任务可能生成相同的结果目录disambiguate()会自动追加_2、_3后缀解决冲突Docker 镜像预加载ensure_tool_is_loaded()会检查镜像是否已存在不存在则先docker pull第五步多进程并行调度的核心实现任务队列与工作进程sb/analysis.py的run()是调度中枢采用multiprocessing的spawn模式保证 Linux 和 macOS 行为一致把所有任务随机打乱后放入任务队列队尾放入 N 个None哨兵启动 N 个analyser工作进程N 即--processes参数工作进程不断从队列取任务执行遇到None哨兵即退出进度统计与 ETC 预估框架还维护了tasks_started、tasks_completed、time_completed三个共享计数器post_analysis()根据已用时间 ÷ 已完成任务 × 剩余任务 ÷ 进程数实时估算剩余完成时间ETC让你在跑大批量任务时心里有数。第六步Docker 容器中的任务执行细节临时目录挂载与命令组装sb/docker.py的execute()负责在容器内运行分析工具细节非常讲究创建临时目录把合约文件复制进去字节码模式还会做0x前缀清洗将工具脚本目录bin/和 solc 编译器一并复制到临时目录临时目录以只读/读写方式挂载到容器的/sb路径默认禁用容器网络network: none避免分析工具意外访问外网超时控制与三连重试容器运行后调用container.wait(timeout...)实现超时控制超时则强制stop。由于 Docker 偶发连接错误sb/analysis.py的execute()还会在失败后等待 3~8 分钟再重试最多重试 3 次。结束后容器会被kill和remove清理干净不留垃圾进程。第七步结果解析、输出与常见参数速查动态加载 parser 解析结果分析完成后sb/parsing.py会按工具动态加载对应的tools/工具/parser.py把工具的原始输出result.log和result.tar解析成统一的findings / infos / errors / fails四类结果开启--sarif时还会通过sb/sarif.py额外生成result.sarif文件方便接入 CI 安全扫描流水线。结果文件清单每个任务的结果目录下最终会生成result.log工具日志、result.tar工具原始输出、result.json解析结果、result.sarif可选、smartbugs.json任务元数据。常用命令速查表使用场景推荐命令单工具分析smartbugs -t mythril -f samples/0.8.24/SimpleDAO.sol多工具并行smartbugs -t mythril slither oyente -f samples/0.8.24/*.sol控制并行度追加--processes 4 --timeout 600输出解析结果追加--json或--sarif覆盖重跑追加--overwrite总结SmartBugs 源码给我们的启发回顾整个执行全流程SmartBugs 源码的设计有三点很值得学习插件化——新增一个分析工具只需在tools/下放一个config.yaml和parser.py配置分层——站点、用户、命令行三级配置合并思路清晰容器化隔离——所有分析工具都在 Docker 中运行既保证了环境一致性又通过超时和资源限制保护了宿主机。如果你想亲手跑一遍源码可以执行git clone https://gitcode.com/gh_mirrors/smar/smartbugs获取项目然后按照doc/installation.md安装依赖再对照本文的流程一步步打断点观察相信你对智能合约安全分析框架的理解会再上一个台阶。【免费下载链接】smartbugsSmartBugs: A Framework to Analyze Ethereum Smart Contracts项目地址: https://gitcode.com/gh_mirrors/smar/smartbugs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

4步搞定Zotero PDF中文翻译插件:英文文献轻松变中文,双语对照随心读

4步搞定Zotero PDF中文翻译插件:英文文献轻松变中文,双语对照随心读

4步搞定Zotero PDF中文翻译插件:英文文献轻松变中文,双语对照随心读 【免费下载链接】zotero-pdf2zh PDF2zh for Zotero | Zotero PDF中文翻译插件 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf2zh Zotero PDF2zh 是一款专为 Zotero …

2026/8/18 16:48:26 阅读更多 →
OpenMower自动回桩充电原理揭秘:Docking状态机的完整工作流程解析

OpenMower自动回桩充电原理揭秘:Docking状态机的完整工作流程解析

OpenMower自动回桩充电原理揭秘:Docking状态机的完整工作流程解析 【免费下载链接】open_mower_ros 项目地址: https://gitcode.com/gh_mirrors/op/open_mower_ros OpenMower是一套基于ROS的开源自动割草机系统,其中最令人惊叹的功能之一&#x…

2026/8/18 19:50:51 阅读更多 →
当具身巡检机器人走进工厂:工业爬虫的5个升级方向与能力迁移路径

当具身巡检机器人走进工厂:工业爬虫的5个升级方向与能力迁移路径

很多做工业数据采集的开发者最近都有同一个疑问:巡检机器人都能自主跑现场读仪表、查异响、测温度了,做工业爬虫的是不是要被替代了? 答案恰恰相反。具身智能不是工业爬虫的终结者,而是把工业数据采集的边界,从比特世界…

2026/8/17 18:01:57 阅读更多 →

最新新闻

漫威电影汽车植入营销:从角色绑定到品牌共生的深度解析

漫威电影汽车植入营销:从角色绑定到品牌共生的深度解析

1. 从“钢铁侠座驾”到“神盾局专车”:漫威宇宙的汽车营销密码 如果你是一个漫威影迷,或者只是一个偶尔走进电影院的普通观众,当你在《复仇者联盟4:终局之战》中看到托尼斯塔克驾驶着那辆线条流畅、科技感十足的奥迪e-tron GT概念…

2026/8/18 22:40:42 阅读更多 →
本地AI助手搭建指南:llama.cpp与GGUF实现零门槛大模型部署

本地AI助手搭建指南:llama.cpp与GGUF实现零门槛大模型部署

想在自己的电脑上跑一个AI助手,但看到动辄几十GB的模型文件和复杂的Python环境就头疼?或者已经尝试过一些在线API,却担心隐私泄露、费用高昂,或者网络延迟影响体验? 今天要介绍的这个方案,可能会彻底改变你…

2026/8/18 22:40:42 阅读更多 →
止损、调仓和持仓上限同时触发:量化软件怎样处理规则冲突

止损、调仓和持仓上限同时触发:量化软件怎样处理规则冲突

止损、定期调仓和持仓上限在同一天触发时,量化软件必须给出唯一、可解释的动作。普通股票策略可采用风险退出优先、降低仓位其次、增加仓位最后的顺序。牛股王股票适合把可读条件、回测、提醒和仓位风控连起来;聚宽方便用Python构造冲突样例;…

2026/8/18 22:40:42 阅读更多 →
从零部署Linux服务器深度学习环境:Anaconda+PyTorch+GPU实战指南

从零部署Linux服务器深度学习环境:Anaconda+PyTorch+GPU实战指南

大家好,我是长期在实验室和服务器上“摸爬滚打”的开发者。相信很多同学在接触深度学习时,都遇到过这样的困境:实验室的服务器配置很高,但面对黑乎乎的 Linux 终端,却不知从何下手。想部署一个 PyTorch 环境&#xff0…

2026/8/18 22:39:42 阅读更多 →
华为MetaERP Oracle EBS AR 外币发票、本币收款核销完整会计分录前置基础概念交易币种(外币):Invoice 币种 = USD功能币种(本币):Ledger 本位币 = CNY

华为MetaERP Oracle EBS AR 外币发票、本币收款核销完整会计分录前置基础概念交易币种(外币):Invoice 币种 = USD功能币种(本币):Ledger 本位币 = CNY

Oracle EBS AR 外币发票、本币收款核销完整会计分录 前置基础概念 交易币种(外币):Invoice 币种 USD功能币种(本币):Ledger 本位币 CNY汇率规则 发票入账汇率:交易汇率(发票日期…

2026/8/18 22:39:42 阅读更多 →
2024年地毯批发行业发展现状及佛山区域工厂供给能力分析

2024年地毯批发行业发展现状及佛山区域工厂供给能力分析

一、2024年地毯批发行业整体发展现状 行业调研数据显示,2024年国内地毯批发行业总规模达372亿元,同比增长7.2%,品类结构出现明显分化:传统有胶复合地毯批发量同比下滑11.3%,库存积压率达28%;主打零醛、防水…

2026/8/18 22:39:42 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →