EndstoneMC/dwarf2cpp
GitHub: EndstoneMC/dwarf2cpp
一个从DWARF调试信息生成C++头文件的Python工具,用于分析二进制文件的内部结构。
Stars: 8 | Forks: 1
# dwarf2cpp
[](https://github.com/EndstoneMC/dwarf2cpp/actions)


从 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测试, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 代码生成, 代码重构, 信息提取, 工具链, 开发辅助, 批量测试, 数据管道, 渗透测试工具, 编译调试, 调试信息处理, 跨平台工具, 软件工程, 逆向工具, 逆向工程, 静态分析