ebpf_exporter
81 строка · 2.5 Кб
1package kallsyms
2
3import (
4"reflect"
5"testing"
6)
7
8// kallsyms.txt is created from the stack below with the filter to wilt it down:
9//
10// sudo cat /proc/kallsyms | grep -C3 -E ' (el0t_64_sync|el0t_64_sync_handler|el0_svc|do_el0_svc|invoke_syscall.constprop.0|__arm64_sys_execve|do_execveat_common|bprm_execve|load_elf_binary|begin_new_exec|mmput|__mmput|exit_mmap|unmap_vmas|unmap_page_range|mark_page_accessed|bpf_trampoline_6442507883.*|bpf_prog_.*_mark_page_accessed)$' > ksym/kallsyms.txt
11
12func TestStack(t *testing.T) {
13stacks := [][]Addr{
14{
15{0xffffffc0801cee9c, "bpf_prog_9a4f2895a09f572a_mark_page_accessed\t[bpf]"},
16{0xffffffc0801cee9c, "bpf_prog_9a4f2895a09f572a_mark_page_accessed\t[bpf]"},
17{0xffffffc08012d06c, "bpf_trampoline_6442507883\t[bpf]"},
18{0xffffffeb19cadfc8, "mark_page_accessed"},
19{0xffffffeb19cf6148, "unmap_page_range"},
20{0xffffffeb19cf6694, "unmap_vmas"},
21{0xffffffeb19d04a60, "exit_mmap"},
22{0xffffffeb19a8a5fc, "__mmput"},
23{0xffffffeb19a8a7fc, "mmput"},
24{0xffffffeb19d900e4, "begin_new_exec"},
25{0xffffffeb19e06ba0, "load_elf_binary"},
26{0xffffffeb19d8f17c, "bprm_execve"},
27{0xffffffeb19d8f754, "do_execveat_common"},
28{0xffffffeb19d8f83c, "__arm64_sys_execve"},
29{0xffffffeb19a28a04, "invoke_syscall.constprop.0"},
30{0xffffffeb19a28afc, "do_el0_svc"},
31{0xffffffeb1a34d2d8, "el0_svc"},
32{0xffffffeb1a34d768, "el0t_64_sync_handler"},
33{0xffffffeb19a11558, "el0t_64_sync"},
34},
35}
36
37d, err := NewDecoder("kallsyms.txt")
38if err != nil {
39t.Fatalf("Error creating ksym decoder: %v", err)
40}
41
42for i, stack := range stacks {
43addrs := make([]uintptr, len(stack))
44for j, addr := range stack {
45addrs[j] = addr.Ptr
46}
47
48decoded := d.Stack(addrs)
49
50if !reflect.DeepEqual(stack, decoded) {
51t.Errorf("expected decoded stack %#v, got %#v", stack, decoded)
52
53for j, addr := range stack {
54if !reflect.DeepEqual(addr, decoded[j]) {
55t.Errorf("Expected stack %d at position %d to be %#v, got %#v", i, j, addr, decoded[j])
56}
57}
58}
59}
60}
61
62func TestSymLookup(t *testing.T) {
63addrs := []Addr{
64{0xffffffeb19a8a478, ""},
65{0xffffffeb19a8a480, "__pidfd_prepare"},
66{0xffffffeb19a8a482, ""},
67{0xffffffeb19cadfc0, "mark_page_accessed"},
68}
69
70d, err := NewDecoder("kallsyms.txt")
71if err != nil {
72t.Fatalf("Error creating ksym decoder: %v", err)
73}
74
75for _, addr := range addrs {
76sym := d.Sym(addr.Ptr)
77if sym != addr.Sym {
78t.Errorf("Expected addr 0x%x to resolve to %q, got %q instead", addr.Ptr, addr.Sym, sym)
79}
80}
81}
82