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표현식은 가리키는 문자열이 아니라 포인터(주소) 자체를 참조합니다.

관련 정보