4个版本 (2个重大更改)
0.3.0 | 2024年1月24日 |
---|---|
0.2.0 | 2023年12月13日 |
0.1.5 | 2021年3月19日 |
0.1.4 | 2021年3月13日 |
#1506 in 解析器实现
每月 12,568 次下载
在 9 个 crate 中使用 (2个直接使用)
51KB
1K SLoC
dof
解析和最终生成DTrace对象格式(DOF)的原型crate。
lib.rs
:
用于提取和解析DTrace对象格式(DOF)中的数据。
dof
crate提供了读取和写入DTrace对象格式(DOF)的类型和函数,DOF是一种类似于ELF的序列化格式,用于在对象文件中存储关于DTrace提供者和探测的信息。DOF部分在编译时从源代码生成,并用于将有关源中定义的提供者和探测的信息传达给内核部分的DTrace。
到DOF C结构的底层绑定包含在dof_bindings
模块中,但是大多数客户端代码将交互使用在crate根目录中定义的更方便的结构。类型Section
描述了一个包含在对象文件中的完整DOF部分。它包含一个或多个Provider
,每个Provider包含一个或多个Probe
。
Probe
描述了相关组件的名称,例如调用它的函数、它所属的提供者以及探测本身的名称。它还包含有关探测调用点在对象文件本身中的位置的信息。这被DTrace用于动态地启用和禁用探测。
crate的使用者可能对从对象文件中反序列化现有的DOF数据感兴趣。函数extract_dof_sections
可用于从ELF或Mach-O对象文件中提取所有部分(以及所有提供者和探测)。
`Section::from_bytes` 和 `Section::as_bytes` 方法可以用于将节直接序列化和反序列化到 DOF 本身,即忽略更大的对象文件格式。
最有用的方法和类型都导出到 crate 根目录。然而,与原始 C 结构的较低级别的 Rust 绑定也暴露在 `dof_bindings
` 模块中,并且可以使用 `des::deserialize_raw_sections
` 函数从 DOF 字节切片中提取。
依赖
约 1.5-2.7MB
约 50K SLoC