open / openat 相对文件名的完整路径

问题描述

使用 opensnoop.py 中的 iovisor/bcc,我试图扩展 ebpf 代码以处理从相对路径中提取完整路径。

例如,运行 opensnoop.py 并在另一个运行 cat anything.txt 的终端中,opensnoop 中的输出将显示相对文件名,而不是绝对路径:

$ sudo ./venv/bin/python bcc/tools/opensnoop.py | grep anything.txt &

$ cat anything.txt 2>/dev/null
19536  cat                -1   2 anything.txt

$ cat /tmp/anything.txt 2>/dev/null
19540  cat                -1   2 /tmp/anything.txt

我已经叙述了 opensnoop.py 中的代码块,我应该考虑修改,并添加一些类似于以下的逻辑:

    // .. existing code
    bpf_probe_read_user(&data.fname,sizeof(data.fname),(void *)filename);
    data.id    = id;
    data.ts    = tsp / 1000;
    data.uid   = bpf_get_current_uid_gid();
    data.flags = flags; // EXTENDED_STRUCT_MEMBER
    data.ret   = ret;
    
    // new code to handle relative paths:
    if (data.fname[0] != '/' && data.fname[0] != '\\0') {
        // TODO if filename doesn't start with a /,need to convert relative path to abs
        struct fs_struct *fs = ((struct task_struct *) bpf_get_current_task())->fs;
        
        // TODO: get pwd path from fs->pwd
        struct path *pwd_path = &fs->pwd // ?

        // TODO: call bpf_d_path(pwd_path,buf,sz)

        // TODO: update data.fname to insert buf pwd)
    }

    events.perf_submit(ctx,&data,sizeof(data));

我遇到的问题是 TODO 部分,似乎没有很多/任何使用新 bpf_d_path 辅助函数的好例子

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)