1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright Authors of Tetragon
13
"github.com/cilium/tetragon/pkg/ksyms"
16
// NB: I should do proper tests but for now, I do something like:
18
// $ perf record -g -e skb:kfree_skb
20
// $ perf script | tail
21
// ffffffffa870f925 sock_close+0x15 (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
22
// ffffffffa80dfbdc __fput+0xcc (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
23
// ffffffffa80dfdde ____fput+0xe (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
24
// ffffffffa7ec66df task_work_run+0x8f (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
25
// ffffffffa7e04191 exit_to_usermode_loop+0x131 (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
26
// ffffffffa7e045d3 do_syscall_64+0x163 (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
27
// ffffffffa8a0008c entry_SYSCALL_64+0x7c (/usr/lib/debug/boot/vmlinux-5.4.0-48-generic)
28
// 7f78e26f43fb __close+0x3b (/usr/lib/x86_64-linux-gnu/libpthread-2.31.so)
29
// 7f78d7217fac [unknown] ([unknown])
31
// $ sudo ./ksyms 0xffffffffa870f925
32
// addr 0xffffffffa870f925: sock_close()+0x15
33
// $ sudo ./ksyms 0xffffffffa8a0008c
34
// addr 0xffffffffa8a0008c: entry_SYSCALL_64_after_hwframe()+0x44
35
// $ sudo ./ksyms 0xffffffffa7e045d3
36
// addr 0xffffffffa7e045d3: do_syscall_64()+0x163
38
// ... which I guess is close enough for now...
42
fmt.Fprintf(os.Stderr, "Usage: %s <addr>\n", os.Args[0])
48
if strings.HasPrefix(arg, "0x") {
49
arg = strings.TrimPrefix(arg, "0x")
53
addr, err := strconv.ParseUint(arg, base, 64)
55
fmt.Fprintf(os.Stderr, "error parsing address (base: %d) %s", base, err)
59
ks, err := ksyms.NewKsyms("/proc")
64
fnsym, err := ks.GetFnOffset(addr)
66
fmt.Printf("addr 0x%x: %s\n", addr, fnsym.ToString())
68
fmt.Printf("addr 0x%x: error: %s\n", addr, err)