1 // SPDX-License-Identifier: GPL-2.0 2 #include <stdio.h> 3 #include <unistd.h> 4 #include <linux/bpf.h> 5 #include <string.h> 6 #include <assert.h> 7 #include <sys/resource.h> 8 #include <bpf/libbpf.h> 9 #include "bpf_load.h" 10 #include "trace_helpers.h" 11 12 int main(int ac, char **argv) 13 { 14 struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY}; 15 long key, next_key, value; 16 char filename[256]; 17 struct ksym *sym; 18 int i; 19 20 snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); 21 setrlimit(RLIMIT_MEMLOCK, &r); 22 23 if (load_kallsyms()) { 24 printf("failed to process /proc/kallsyms\n"); 25 return 2; 26 } 27 28 if (load_bpf_file(filename)) { 29 printf("%s", bpf_log_buf); 30 return 1; 31 } 32 33 for (i = 0; i < 5; i++) { 34 key = 0; 35 printf("kprobing funcs:"); 36 while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) { 37 bpf_map_lookup_elem(map_fd[0], &next_key, &value); 38 assert(next_key == value); 39 sym = ksym_search(value); 40 key = next_key; 41 if (!sym) { 42 printf("ksym not found. Is kallsyms loaded?\n"); 43 continue; 44 } 45 46 printf(" %s", sym->name); 47 } 48 if (key) 49 printf("\n"); 50 key = 0; 51 while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) 52 bpf_map_delete_elem(map_fd[0], &next_key); 53 sleep(1); 54 } 55 56 return 0; 57 } 58