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