如何从 eBPF uprobe 中函数参数的结构中检索特定值

问题描述 投票:0回答:1

我正在从事一些 eBPF 和 Redis 相关的任务。然而,我遇到了一些困难。当我将 uprobe 附加到 Redis 中的 processCommand 函数时,我想从 processCommand 函数的参数中检索一些值。该参数是指向包含许多字段的结构(client* c)的指针。我只对此结构中的某些字段感兴趣。

eBPF 程序中是否有一种方法可以从结构中仅检索特定字段的值,而无需从 Redis 复制整个客户端结构定义?客户端结构还包括其他结构,复制它的定义看起来很复杂。

redis ebpf bpf
1个回答
0
投票

eBPF 程序中是否有一种方法可以从结构中仅检索特定字段的值,而无需从 Redis 复制整个客户端结构定义?

是的,您必须知道字段的偏移量,或者最好将结构声明复制到 eBPF 中。您可以在从用户内存中读取数据之前操作指针。

bpf_probe_read_user(&val, sizeof(val), c.some.field)

客户端结构还包括其他结构,复制它的定义看起来很复杂。

虽然复杂,但这可能是最好的方法。就像我提到的,如果您知道数据在结构中的偏移量,您也可以使其工作。

bpf_probe_read_user(&val, sizeof(val), ((void *) c) + 123)
但是现在您正在做编译器通常会为您做的工作,计算出偏移量需要您知道编译器如何在内存中布局结构。

© www.soinside.com 2019 - 2024. All rights reserved.