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 "libbpf.h" 9 #include "bpf_load.h" 10 11 int main(int ac, char **argv) 12 { 13 struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY}; 14 long key, next_key, value; 15 char filename[256]; 16 struct ksym *sym; 17 int i; 18 19 snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); 20 setrlimit(RLIMIT_MEMLOCK, &r); 21 22 if (load_kallsyms()) { 23 printf("failed to process /proc/kallsyms\n"); 24 return 2; 25 } 26 27 if (load_bpf_file(filename)) { 28 printf("%s", bpf_log_buf); 29 return 1; 30 } 31 32 for (i = 0; i < 5; i++) { 33 key = 0; 34 printf("kprobing funcs:"); 35 while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) { 36 bpf_map_lookup_elem(map_fd[0], &next_key, &value); 37 assert(next_key == value); 38 sym = ksym_search(value); 39 printf(" %s", sym->name); 40 key = next_key; 41 } 42 if (key) 43 printf("\n"); 44 key = 0; 45 while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) 46 bpf_map_delete_elem(map_fd[0], &next_key); 47 sleep(1); 48 } 49 50 return 0; 51 } 52