14 个版本 (5 个重大更新)
0.6.4 | 2024 年 3 月 24 日 |
---|---|
0.6.3 | 2024 年 1 月 13 日 |
0.5.0 | 2024 年 1 月 7 日 |
0.4.2 | 2024 年 1 月 6 日 |
0.1.3 | 2024 年 1 月 2 日 |
#9 in #debug-info
每月 56 次下载
94KB
2.5K SLoC
dwat
一个性能较好的库,旨在使 DWARF (v4/v5) 调试信息更容易访问。
到目前为止,我的重点是使 DWARF 信息中存在的类型信息(特别是结构体)更容易使用,因此与此相关的功能在此阶段得到了大量实现。
当前功能:
- 按名称获取类型列表
- 按名称获取类型映射
- 按名称查找类型
- 将解析的结构体和联合体信息格式化为 C 风格定义
- 获取结构体/联合体的成员
- 获取修饰符的底层类型(易失性/常量等...)
- 获取类型的字节大小信息
- 获取位字段结构体成员的位大小
CLI
尽管 dwat
主要是一个库,但包含了一个基本的 CLI
Usage: dwat <COMMAND>
Commands:
lookup Find and display a single struct
dump Find and display all structs
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
Python 绑定
dwat
有 Python 绑定!文档可以在这里找到:https://zolutal.github.io/dwat/
示例
在 examples
目录中有几个值得查看的示例。
使用方法
使用库的第一步是将包含 DWARF 信息的文件加载到内存中,然后调用 Dwarf::load
let file = File::open(path)?;
let mmap = unsafe { Mmap::map(&file) }?;
let dwarf = Dwarf::load(&*mmap)?;
DWARF 对象有一个 lookup_type
方法,可以用来按名称查找任何实现了 Tagged
特质的类型,在这种情况下将搜索结构体
let found = dwarf.lookup_type::<dwat::Struct>(struct_name)?;
可以通过调用 .members()
来检索结构体成员,该方法返回一个 Member
结构体的 Vector。
let members = struc.members(&dwarf)?;
可以通过调用 to_string
函数将结构体对象转换为 C 风格定义的字符串
if let Some(found) = found {
println!("{}", found.to_string(&dwarf)?);
}
依赖项
~5–15MB
~209K SLoC