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 解析器实现

Download history 5649/week @ 2024-04-08 4881/week @ 2024-04-15 5560/week @ 2024-04-22 4465/week @ 2024-04-29 4162/week @ 2024-05-06 6418/week @ 2024-05-13 4374/week @ 2024-05-20 4238/week @ 2024-05-27 2494/week @ 2024-06-03 2083/week @ 2024-06-10 2391/week @ 2024-06-17 3101/week @ 2024-06-24 2125/week @ 2024-07-01 3471/week @ 2024-07-08 4175/week @ 2024-07-15 2788/week @ 2024-07-22

每月 12,568 次下载
9 crate 中使用 (2个直接使用)

Apache-2.0

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