工具
vmlinux-to-elf 内核符号恢复工具
通过定位并解码内嵌的 kallsyms 符号表,从 Linux 内核镜像重建带函数与变量符号、可供分析的 ELF 文件;输入可以是原始或压缩的 vmlinux、vmlinuz、zImage、bzImage 数据块,部分 Android boot.img 文件,或已去除符号的内核 ELF。工具会检测压缩格式、指令集、字节序、位宽、入口点和近似基址,并生成可在 IDA Pro 或 Ghidra 中分析的 ELF;另附列出符号的 kallsyms-finder、独立解压工具和 GTK 图形界面。
使用条件与局限
- 审阅时最新版本为 1.3.6,于 2026-05-20 发布在 GitHub 和 PyPI;其发布说明包括对去除节区的 ELF 内核重新序列化的初步支持,以及 uImage LZMA 解压。所审阅的 master 提交比它多四个提交,内容为图形界面和打包更新,并带有一个没有对应发布的 1.3.6.1 标签。PyPI 将项目标为 beta 阶段。
- 需要 Python 3.9+ 以及 lz4、zstandard、minilzo 和 peewee。README 介绍了几种安装命令行和图形界面的方式:Ubuntu 上用 snap,或从 AUR 安装,或用 uv 并配合 GTK 4、libadwaita 和 PyGObject 开发包;在 libadwaita 低于 1.6 的发行版上,可通过 Flathub 使用图形界面。
- 输入为分析者已有的内核镜像;未启用 CONFIG_KALLSYMS 编译的内核不受支持。README 称截至 2023 年 8 月支持 Linux 2.6.10 至 6.4,可为原始内核检测 MIPS、ARM、ARM64、PowerPC、SPARC、x86、x86-64、SuperH 和 ARC 架构,支持 XZ、LZMA、GZip、BZ2、LZ4、LZO 和 Zstd 解压,并能处理 OpenWrt 的未压缩 kallsyms 变体。自动检测失败时,可手动指定指令集、位宽、文件偏移和基址。
- 采用 GPL-3.0-or-later。恢复出的符号只包含 kallsyms 中存储的名称、地址和 nm 风格的类型;基址为启发式推断,即第一个代码段符号地址清除低 12 位后的值。本次未转换任何内核镜像。
关于此条目
- 类型
- 工具
- 类别
- 固件工具
- 关联
- 基础工具
- 目标
- 二进制 · 固件
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
- README.md#L89-L98 GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
- README.md#L153-L192 GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
- pyproject.toml GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
- vmlinux_to_elf/core/kallsyms.py GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
- LICENSE GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
- https://github.com/marin-m/vmlinux-to-elf/releases/tag/1.3.6
- https://pypi.org/project/vmlinux-to-elf/1.3.6/