On Tue, Mar 31, 2026 at 9:33 AM Andrii Nakryiko <[email protected]> wrote: > > On Sun, Mar 29, 2026 at 5:44 AM Hoyeon Lee <[email protected]> wrote: > > > > bpf_program__attach_kprobe_opts() currently attaches a single kprobe only > > by func_name, with an optional offset. This covers only the symbol- > > have you tried passing NULL for func_name and specifying absolute > address in opts.offset? Looking at the code I don't see why that won't > work, we don't enforce func_name to be non-NULL > > This NULL will turn into config1 = 0, and offset will be config 2, > which I think is what you want to attach by address, according to > perf_event_open documentation > > union { > __u64 bp_addr; /* breakpoint address */ > __u64 kprobe_func; /* for perf_kprobe */ > __u64 uprobe_path; /* for perf_uprobe */ > __u64 config1; /* extension of config */ > }; > > union { > __u64 bp_len; /* breakpoint size */ > __u64 kprobe_addr; /* with kprobe_func == NULL */ > __u64 probe_offset; /* for perf_[k,u]probe */ > __u64 config2; /* extension of config1 */ > }; > > This is the same approach as with uprobes, btw. > >
I tested this after your comment, and you are right. For PMU-based non-legacy attach, func_name = NULL with opts.offset = <raw-address> already works today. However, this does not work for legacy tracefs/debugfs kprobes, because the tracefs event string formatting still expects symbol-based input. So for v3, instead of adding new field to bpf_kprobe_opts(), I'll document that offset can be treated as an absolute address when func_name = NULL, and make legacy path support the same raw-address form as well. > > based form, not the raw-address form that the kernel already supports > > for both kprobe PMU events and legacy tracefs/debugfs kprobes. Callers > > that already have a target IP still have to drop down to > > perf_event_open() or direct tracefs writes. > > > > libbpf already exposes address-based attach for kprobe_multi through > > bpf_kprobe_multi_opts.addrs. This commit adds bpf_kprobe_opts.addr so > > that single kprobes can be attached either by func_name + offset or by > > raw address. > > > > Signed-off-by: Hoyeon Lee <[email protected]> > > --- > > tools/lib/bpf/libbpf.c | 88 +++++++++++++++++++++++++++++------------- > > tools/lib/bpf/libbpf.h | 5 ++- > > 2 files changed, 65 insertions(+), 28 deletions(-) > > > > [...]

