Как "%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;
}
это выглядит совсем по-другому. Я использую эту программу 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;
}
Мы получим: args: 7ffde047d6c4 0x7ffde047d6c4 140728366257860