bpftraceでargv [0]を取得する方法は?

bpftraceでargv [0]を取得する方法は?

非常に単純なスクリプトがあります。

#!/usr/bin/bpftrace
tracepoint:syscalls:sys_enter_exec*
{
    @start[pid] = nsecs;
    printf("START;%-6d;", pid);
    join(args->argv);
}
tracepoint:syscalls:sys_enter_exit*
{
    $from = @start[pid];
    $until = nsecs;
    printf("STOP;%-5d;%-16d\n", pid, $until-$from);
}

args->argv[0]私は一般的な複数行よりもそれを印刷したいと思いますjoin(args->argv)

問題は、これがうまくprintf("START;%-6d;%s", pid, args->argv[0]);いかないことです。

/tmp/foo.bt:5:5-48: ERROR: printf: %s specifier expects a value of type string (integer supplied)
    printf("START;%-6d;%s", pid, args->argv[0]);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

args->argv文字列配列であることが確実で驚きました。この問題をどのように解決できますか?

ベストアンサー1

str(args->argv[0])最後の引数として使用するとprintf機能します。そうでない場合、str式は指す文字列ではなく、ポインタ(アドレス)自体を参照します。

おすすめ記事