工具
SVD-Loader:Ghidra CMSIS-SVD 外设映射脚本
leveldown security 发布的 Ghidra 脚本,读取 CMSIS-SVD 文件(描述微控制器内存映射外设及其寄存器的 XML 格式),并将其应用到已载入 Ghidra 的固件上。它为外设地址范围创建内存块,为每个外设生成以寄存器为字段的结构体类型,并在各外设基址处添加标签,从而可按外设和寄存器名称阅读寄存器访问。它面向小端 Arm Cortex-M 设备,并附带一份移植到 Ghidra Jython 环境的 cmsis-svd 解析器分支。
使用条件与局限
- 仓库没有发布版本或标签。所审阅的 master 最新提交是 2024-02-01 的一次合并,扩充了安装说明;最近的代码改动于 2023-03-04 合并,为脚本加入了错误处理,并修复了内置解析器对外设 derivedFrom 的处理。README 未说明支持的 Ghidra 版本,2019 年的一次提交修复了与 Ghidra 9.1 的兼容性,仓库也没有测试。
- 脚本在 Ghidra 的 CodeBrowser 中运行:在脚本管理器中把克隆下来的仓库添加为脚本目录,再对当前打开的程序运行 SVD-Loader.py。脚本面向 Ghidra 的 Jython 环境编写,并从同一目录导入内置的 cmsis_svd 包(版本 0.4)。
- 需要提供目标芯片的 CMSIS-SVD 文件(README 建议从 cmsis-svd 合集或 Keil 软件包获取),并已把固件镜像导入 Ghidra。若 SVD 声明为大端 CPU,脚本会停止运行;若 CPU 不是 Cortex-M,脚本会提示警告但继续执行。与已有内存块冲突的外设地址范围会被报告并跳过。
- 脚本只应用外设和寄存器:生成的内存块为未初始化、易失、可读写,不会添加 SVD 中的寄存器位字段、枚举值和中断。结果取决于所提供的 SVD 文件;无法创建内存块或结构体时,脚本只打印失败信息并继续执行。
- SVD-Loader.py 采用 GPL-3.0;分支而来的 cmsis_svd/ 代码沿用上游 cmsis-svd 的 Apache-2.0 许可。README 中提供使用说明的博客链接在审阅时返回 HTTP 404。本次未在 Ghidra 中运行该脚本。
关于此条目
- 类型
- 工具
- 类别
- 固件工具
- 关联
- 基础工具
- 目标
- 固件
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · leveldown-security/SVD-Loader-Ghidra · 修订 4b21fa5
- SVD-Loader.py GitHub · leveldown-security/SVD-Loader-Ghidra · 修订 4b21fa5
- SVD-Loader.py#L84-L105 GitHub · leveldown-security/SVD-Loader-Ghidra · 修订 4b21fa5
- SVD-Loader.py#L131-L201 GitHub · leveldown-security/SVD-Loader-Ghidra · 修订 4b21fa5
- cmsis_svd/__init__.py GitHub · leveldown-security/SVD-Loader-Ghidra · 修订 4b21fa5
- LICENSE GitHub · leveldown-security/SVD-Loader-Ghidra · 修订 4b21fa5