This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-variable-monitor/source/module/monitor_kallsyms.c

69 lines
2.3 KiB
C
Raw Normal View History

2023-11-16 17:39:26 +08:00
#include "monitor_kallsyms.h"
2023-11-16 18:26:49 +08:00
unsigned long (*diag_kallsyms_lookup_name)(const char *name);
struct kprobe kprobe_kallsyms_lookup_name = {.symbol_name =
"kallsyms_lookup_name"};
2023-11-27 15:16:35 +08:00
// orig_fun
2023-11-16 18:26:49 +08:00
unsigned int (*orig_stack_trace_save_tsk)(struct task_struct *task,
unsigned long *store,
unsigned int size,
unsigned int skipnr);
void (*orig_show_stack)(struct task_struct *task, unsigned long *sp,
const char *loglvl);
struct sched_class *orig_idle_sched_class;
int (*orig_get_task_type)(struct sched_entity *se);
int (*orig_kernfs_name)(struct kernfs_node *kn, char *buf, size_t buflen);
int (*orig_access_remote_vm)(struct mm_struct *mm, unsigned long addr,
void *buf, int len, unsigned int gup_flags);
2023-11-22 22:53:42 -05:00
struct task_struct *(*orig_find_task_by_vpid)(pid_t nr);
2023-12-14 02:22:17 -05:00
void (*orig_open_softirq)(int nr, void (*action)(struct softirq_action *));
void (*orig_raise_softirq)(unsigned int nr);
2023-11-27 15:16:35 +08:00
/**
* @brief diag_kallsyms_lookup_name init
*
* @return int
*/
2023-11-16 17:39:26 +08:00
static int fn_kallsyms_lookup_name_init(void) {
register_kprobe(&kprobe_kallsyms_lookup_name);
diag_kallsyms_lookup_name = (void *)kprobe_kallsyms_lookup_name.addr;
unregister_kprobe(&kprobe_kallsyms_lookup_name);
2023-11-16 21:08:27 -05:00
printk(KERN_INFO "diag_kallsyms_lookup_name is %p\n",
2023-11-16 17:39:26 +08:00
diag_kallsyms_lookup_name);
if (!diag_kallsyms_lookup_name) {
return -EINVAL;
}
return 0;
}
2023-11-16 21:08:27 -05:00
/**
* @brief get all orig_fun
*
* @return int 0 is success
*/
2023-11-16 17:39:26 +08:00
int init_orig_fun(void) {
2023-11-27 01:42:45 -05:00
int ret = fn_kallsyms_lookup_name_init(); // init kallsyms_lookup_name
2023-11-16 21:08:27 -05:00
2023-11-27 01:42:45 -05:00
if (ret) {
2023-11-16 21:08:27 -05:00
printk(KERN_INFO "init kallsyms_lookup_name failed\n");
return ret;
}
2023-11-27 01:42:45 -05:00
LOOKUP_SYMS(stack_trace_save_tsk); // stack_trace_save_tsk
LOOKUP_SYMS(show_stack); // show_stack
LOOKUP_SYMS(idle_sched_class); // idle_sched_class
LOOKUP_SYMS(access_remote_vm); // access_remote_vm
2023-11-16 21:08:27 -05:00
LOOKUP_SYMS_NORET(
2023-11-27 01:42:45 -05:00
get_task_type); // get_task_type | this fun is not available on 5.17.15
LOOKUP_SYMS_NORET(kernfs_name); // kernfs_name
2023-11-22 22:53:42 -05:00
LOOKUP_SYMS_NORET(find_task_by_vpid);
2023-12-14 02:22:17 -05:00
LOOKUP_SYMS_NORET(open_softirq);
LOOKUP_SYMS_NORET(raise_softirq);
2023-11-16 18:26:49 +08:00
return 0;
2023-11-16 17:39:26 +08:00
}