ebpf_exporter

Форк
0
/
decoder_test.go 
81 строка · 2.5 Кб
1
package kallsyms
2

3
import (
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

12
func TestStack(t *testing.T) {
13
	stacks := [][]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

37
	d, err := NewDecoder("kallsyms.txt")
38
	if err != nil {
39
		t.Fatalf("Error creating ksym decoder: %v", err)
40
	}
41

42
	for i, stack := range stacks {
43
		addrs := make([]uintptr, len(stack))
44
		for j, addr := range stack {
45
			addrs[j] = addr.Ptr
46
		}
47

48
		decoded := d.Stack(addrs)
49

50
		if !reflect.DeepEqual(stack, decoded) {
51
			t.Errorf("expected decoded stack %#v, got %#v", stack, decoded)
52

53
			for j, addr := range stack {
54
				if !reflect.DeepEqual(addr, decoded[j]) {
55
					t.Errorf("Expected stack %d at position %d to be %#v, got %#v", i, j, addr, decoded[j])
56
				}
57
			}
58
		}
59
	}
60
}
61

62
func TestSymLookup(t *testing.T) {
63
	addrs := []Addr{
64
		{0xffffffeb19a8a478, ""},
65
		{0xffffffeb19a8a480, "__pidfd_prepare"},
66
		{0xffffffeb19a8a482, ""},
67
		{0xffffffeb19cadfc0, "mark_page_accessed"},
68
	}
69

70
	d, err := NewDecoder("kallsyms.txt")
71
	if err != nil {
72
		t.Fatalf("Error creating ksym decoder: %v", err)
73
	}
74

75
	for _, addr := range addrs {
76
		sym := d.Sym(addr.Ptr)
77
		if sym != addr.Sym {
78
			t.Errorf("Expected addr 0x%x to resolve to %q, got %q instead", addr.Ptr, addr.Sym, sym)
79
		}
80
	}
81
}
82

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.