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 文件查看器的体验,浏览您固件中的所有函数和变量符号。通过排序和筛选来聚焦固件的特定方面。通过旭日图以类似文件系统的方式探索内存占用情况。 ![上传并探索](/static/img/upload+explore.png) ### 对固件构建进行 Diff 和静态分析 上传第二个固件版本,您可以通过高亮显示任何符号在 flash、RAM 和栈大小上的所有变化,来查看这些更改对内存产生的影响。 每个函数的 ASM 二进制代码都使用 [capstone-js](https://alexaltea.github.io/capstone.js/) 进行反汇编。静态函数调用通过它们的调用指令来检测。栈大小是通过调试信息来估算的,即在断点处进行栈展开所需的栈大小。动态函数调用也会被检测到(计划实现手动解析功能)。目前这仅是一项实验性功能,且只适用于 Cortex-M 控制器固件。 ![Diff 和函数详情页](/static/img/diff+fndetails.png) ## 开发 要在您的 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, 云安全监控, 内存分析, 反汇编, 固件分析, 嵌入式, 暗色界面, 静态分析