tetragon

Форк
0
/
ksyms.go 
70 строк · 2.0 Кб
1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright Authors of Tetragon
3

4
package main
5

6
import (
7
	"fmt"
8
	"log"
9
	"os"
10
	"strconv"
11
	"strings"
12

13
	"github.com/cilium/tetragon/pkg/ksyms"
14
)
15

16
// NB: I should do proper tests but for now, I do something like:
17
//
18
// $ perf record -g  -e skb:kfree_skb
19
// ...
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])
30
//
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
37
//
38
// ... which I guess is close enough for now...
39

40
func main() {
41
	if len(os.Args) < 2 {
42
		fmt.Fprintf(os.Stderr, "Usage: %s <addr>\n", os.Args[0])
43
		os.Exit(1)
44
	}
45

46
	arg := os.Args[1]
47
	base := 10
48
	if strings.HasPrefix(arg, "0x") {
49
		arg = strings.TrimPrefix(arg, "0x")
50
		base = 16
51
	}
52

53
	addr, err := strconv.ParseUint(arg, base, 64)
54
	if err != nil {
55
		fmt.Fprintf(os.Stderr, "error parsing address (base: %d) %s", base, err)
56
		os.Exit(1)
57
	}
58

59
	ks, err := ksyms.NewKsyms("/proc")
60
	if err != nil {
61
		log.Fatal(err)
62
	}
63

64
	fnsym, err := ks.GetFnOffset(addr)
65
	if err == nil {
66
		fmt.Printf("addr 0x%x: %s\n", addr, fnsym.ToString())
67
	} else {
68
		fmt.Printf("addr 0x%x: error: %s\n", addr, err)
69
	}
70
}
71

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

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

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

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