paulwuertz/pexplorer
GitHub: paulwuertz/pexplorer
pexplorer 是一款基于浏览器的嵌入式固件静态分析工具,通过对带调试信息的 ELF 文件进行解析,帮助开发者直观浏览固件内存占用并进行版本间差异对比。
Stars: 6 | Forks: 0
# pexplorer
一个受 [puncover](https://github.com/HBehrens/puncover/) 启发的固件浏览器,旨在通过静态分析您的 ELF 文件,为您提供有关构建的最全面信息。
[在您的浏览器中本地](https://paulwuertz.github.io/pexplorer) 亲自体验,上传您的 ELF 文件(请使用带调试信息 "-g" 的构建),探索您的固件内存占用情况或比较不同的固件版本。
## 功能
### 类似“MAP 文件查看器”的浏览体验
上传 ELF 文件,即可获得类似 MAP 文件查看器的体验,浏览您固件中的所有函数和变量符号。通过排序和筛选来聚焦固件的特定方面。通过旭日图以类似文件系统的方式探索内存占用情况。

### 对固件构建进行 Diff 和静态分析
上传第二个固件版本,您可以通过高亮显示任何符号在 flash、RAM 和栈大小上的所有变化,来查看这些更改对内存产生的影响。
每个函数的 ASM 二进制代码都使用 [capstone-js](https://alexaltea.github.io/capstone.js/) 进行反汇编。静态函数调用通过它们的调用指令来检测。栈大小是通过调试信息来估算的,即在断点处进行栈展开所需的栈大小。动态函数调用也会被检测到(计划实现手动解析功能)。目前这仅是一项实验性功能,且只适用于 Cortex-M 控制器固件。

## 开发
要在您的 ELF 文件上进行尝试,请使用 [github page export](https://paulwuertz.github.io/pexplorer)。
对于本地部署,请使用 `npm install`(或 `pnpm install` 或 `yarn`)安装依赖项,并启动开发服务器:`npm run dev`
## 构建
要创建生产版本,我们首先需要构建 WASM go 模块。TODO 更好的描述...
然后可以构建 svelte Web 应用程序:`npm run build`
您可以使用 `npm run preview` 预览生产构建。
## 计划实现哪些功能?
请查看 [项目看板](https://github.com/users/paulwuertz/projects/1)。
以下是我在后续阶段希望实现的一些重要功能:
- 针对...的静态分析
- ...经过测试且精确的栈大小
- ...调用图提取和手动动态调用解析
- ...每个函数的最坏情况栈大小
- ...最坏情况执行时间 - 至少进行一些指令计数估算
- ...中断 - 它们的运行时间和栈大小尤其重要
- RTOS 功能检测
- 自动检测最流行的 RTOS,如 zephyr、FreeRTOS 等
- 提取所有线程、栈的列表
- 在可能的情况下,使用实际配置的栈大小对线程进行栈分析
- 更好的 diff 和趋势检测
- 跨版本对函数的反汇编代码(dis-ASM)进行 diff
- 比较两个以上的版本,并从中生成更多统计图表
- 配置
- 为每个页面支持静态 - 可共享链接
- 添加设置和解析页面
- 构建一个 CLI 命令实用程序,用于在 CI 自动化中进行栈健康检查
标签:ELF, JARM, SBOM分析, Svelte, Wayback Machine, WebAssembly, 云安全监控, 内存分析, 反汇编, 固件分析, 嵌入式, 暗色界面, 静态分析