github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/pkg/ebpftracer/c/headers/common/ksymbols.h (about) 1 #ifndef __COMMON_KSYMBOLS_H__ 2 #define __COMMON_KSYMBOLS_H__ 3 4 #include <vmlinux.h> 5 6 #include <common/common.h> 7 8 // PROTOTYPES 9 10 statfunc void *get_symbol_addr(char *); 11 statfunc void *get_stext_addr(); 12 statfunc void *get_etext_addr(); 13 statfunc struct pipe_inode_info *get_file_pipe_info(struct file *); 14 15 // FUNCTIONS 16 17 statfunc void *get_symbol_addr(char *symbol_name) 18 { 19 char new_ksym_name[MAX_KSYM_NAME_SIZE] = {}; 20 bpf_probe_read_str(new_ksym_name, MAX_KSYM_NAME_SIZE, symbol_name); 21 void **sym = bpf_map_lookup_elem(&ksymbols_map, (void *) &new_ksym_name); 22 23 if (sym == NULL) 24 return 0; 25 26 return *sym; 27 } 28 29 statfunc void *get_stext_addr() 30 { 31 char start_text_sym[7] = "_stext"; 32 return get_symbol_addr(start_text_sym); 33 } 34 35 statfunc void *get_etext_addr() 36 { 37 char end_text_sym[7] = "_etext"; 38 return get_symbol_addr(end_text_sym); 39 } 40 41 statfunc struct pipe_inode_info *get_file_pipe_info(struct file *file) 42 { 43 struct pipe_inode_info *pipe = BPF_CORE_READ(file, private_data); 44 char pipe_write_sym[11] = "pipe_write"; 45 void *file_write_iter_op = BPF_CORE_READ(file, f_op, write_iter); 46 47 if (file_write_iter_op != get_symbol_addr(pipe_write_sym)) 48 return NULL; 49 50 return pipe; 51 } 52 53 #endif