compile/remote-compile/lbc/bpf/lbc.bpf.c (37 lines of code) (raw):
//
// Created by 廖肇燕 on 2021/7/15.
//
#include "lbc.h"
struct data_t {
u32 pid;
u32 stack_id;
u32 parent_id;
u64 cookie;
char comm[16];
} ;
LBC_PERF_OUTPUT(my_map, struct data_t, 1024);
LBC_HASH(pids, u64, u32, 1024);
LBC_STACK(callStack,32);
SEC("kprobe/_do_fork")
int bpf_prog1(struct pt_regs *ctx)
{
struct data_t data = {0, 0};
u32 *pcnt, cnt = 1;
u32 pid;
struct task_struct *parent;
data.pid = bpf_get_current_pid_tgid()>>32;
data.cookie = 0x12345678;
bpf_get_current_comm(&(data.comm), 16);
data.stack_id = bpf_get_stackid(ctx, &callStack, KERN_STACKID_FLAGS);
bpf_perf_event_output(ctx, &my_map, BPF_F_CURRENT_CPU, &data, sizeof(data));
parent = (struct task_struct *)PT_REGS_PARM1(ctx);
data.parent_id = BPF_CORE_READ(parent, pid);
pid = data.pid;
pcnt = bpf_map_lookup_elem(&pids, &pid);
if (pcnt) {
cnt = *pcnt + 1;
bpf_printk("count: %d\n", cnt);
} else {
cnt = 1;
}
bpf_map_update_elem(&pids, &pid, &cnt, BPF_ANY);
return 0;
}
char _license[] SEC("license") = "GPL";