工具

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 位后的值。本次未转换任何内核镜像。

关于此条目

类型
工具
类别
固件工具
关联
基础工具
目标
二进制 · 固件

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

一手来源

  1. README.md GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
  2. README.md#L89-L98 GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
  3. README.md#L153-L192 GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
  4. pyproject.toml GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
  5. vmlinux_to_elf/core/kallsyms.py GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
  6. LICENSE GitHub · marin-m/vmlinux-to-elf · 修订 2d094bc
  7. https://github.com/marin-m/vmlinux-to-elf/releases/tag/1.3.6
  8. https://pypi.org/project/vmlinux-to-elf/1.3.6/