小编lib*_*ibo的帖子

bpf_trace_printk 格式指针

中是如何"%p"实施的bpf_trace_printk?看起来很不一样printf

#include <uapi/linux/ptrace.h>

int print_args(struct pt_regs *ctx) {
    void *ptr = (void*)PT_REGS_PARM1(ctx);
    bpf_trace_printk("args: %lx %p %ld\n", ptr, ptr, ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用这个 eBPF 程序来跟踪一个函数的参数。参数的类型是指向某个结构的指针。

一种输出是: args: 7ffde047d6c4 00000000ec7e9023 140728366257860

我们可以注意到 的输出"%p"非常奇怪。如果我们使用标准 C 程序来检查输出:

#include <stdio.h>

int main() {
    void *ptr = (void*)0x7ffde047d6c4;
    printf("args: %lx %p %ld\n", ptr, ptr, ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我们将获得: args: 7ffde047d6c4 0x7ffde047d6c4 140728366257860

c bpf ebpf

5
推荐指数
1
解决办法
846
查看次数

标签 统计

bpf ×1

c ×1

ebpf ×1