EndstoneMC/dwarf2cpp

GitHub: EndstoneMC/dwarf2cpp

一个从DWARF调试信息生成C++头文件的Python工具,用于分析二进制文件的内部结构。

Stars: 8 | Forks: 1

# dwarf2cpp [![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/1fe6479e37052044.svg)](https://github.com/EndstoneMC/dwarf2cpp/actions) ![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) ![Python 版本](https://img.shields.io/badge/python-3.10%2B-blue.svg) 从 DWARF 调试信息格式(DWARF)生成 C++ 头文件。 ## 安装说明 最简单的入门方式是使用预编译的包。无需 C++ 工具链或 LLVM。 ``` uvx dwarf2cpp ``` 或使用 pip ``` pip install dwarf2cpp ``` ### 从源代码构建 仅当没有适用于您平台的预编译 wheel 包时,才需要从源代码构建。 由于 dwarf2cpp 使用 **pybind11** 从 Python 访问 LLVM 的 DWARF DebugInfo 模块,因此需要一个可用的 C++ 工具链: * 在 Windows 上:**MSVC(Visual Studio 构建工具)** * 在 Linux 上:**GCC (g++)** * 在 macOS 上:**Apple Clang (Xcode 命令行工具)** ``` git clone https://github.com/EndstoneMC/dwarf2cpp.git cd dwarf2cpp pip install . ``` ## 使用方法 ``` Usage: dwarf2cpp [OPTIONS] PATH Options: --base-dir TEXT Base directory used during compilation. [required] -o, --output-path PATH Output directory for generated files. Defaults to 'out' inside the input file's directory. --help Show this message and exit. ``` `PATH` 参数必须指向包含 DWARF 调试信息的二进制文件。 * `--base-dir` 应指向编译时使用的根目录。这有助于在重建头文件时解析相对的包含路径。 * `--output-path` 控制生成的头文件存储位置。如果未指定,工具会在输入文件旁边创建一个 `out/` 文件夹。 ## 示例 ### 从 `libminecraftpe.so` 提取 ``` dwarf2cpp path/to/libminecraftpe.so --base-dir D:/a/_work/1/s ``` ### 从 `bedrock_server`(Linux)提取 ``` dwarf2cpp path/to/bedrock_server --base-dir /mnt/vss/_work/1/s ``` ## 动机 / 用途 典型用例包括: * 分析专有软件的内部结构。 * 支持 **[Endstone](https://github.com/EndstoneMC/endstone)** 等插件框架的开发。 * 研究从 DWARF 自动重建源代码。 ## 局限性 * 生成的头文件可能无法直接编译。可能需要手动调整。 * 模板、内联函数和宏并不总能准确重建。 * 仅适用于使用 DWARF 调试信息编译的二进制文件。已剥离符号的二进制文件无法使用。 * 仅经过简单测试。对于某些二进制文件可能会失败。 ## 致谢 本项目使用了以下开源技术: * [LLVM Project](https://llvm.org/) - DWARF DebugInfo 解析器。 * [pybind11](https://pybind11.readthedocs.io/) - C++/Python 绑定。 * [click](https://click.palletsprojects.com/) - 命令行界面框架。 ## 安全 / 免责声明 ## 发布流程 1. 在 `CHANGELOG.md` 的 `## [未发布]` 部分添加更改内容 2. 更新 `pyproject.toml` 中的 `version`,然后提交并推送到 `main` 分支 3. 前往 **Actions > Release > Run workflow** 使用 **试运行** 可以在不实际执行的情况下预览效果。 ## 贡献 欢迎贡献。在 GitHub 上提交 issue 或 pull request。 ## 许可证 本项目基于 MIT 许可证分发。 详情请参阅 [LICENSE](LICENSE) 文件。
标签:C++头文件生成, DWARF解析, GitHub项目, LLVM, MIT许可, pybind11, WAF测试, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码生成, 代码重构, 信息提取, 工具链, 开发辅助, 批量测试, 数据管道, 渗透测试工具, 编译调试, 调试信息处理, 跨平台工具, 软件工程, 逆向工具, 逆向工程, 静态分析