48 lines
1.8 KiB
C
48 lines
1.8 KiB
C
#include "monitor_kallsyms.h"
|
|
|
|
unsigned long (*diag_kallsyms_lookup_name)(const char *name);
|
|
struct kprobe kprobe_kallsyms_lookup_name = {.symbol_name =
|
|
"kallsyms_lookup_name"};
|
|
|
|
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);
|
|
|
|
/// @brief init kallsyms_lookup_name
|
|
/// @param
|
|
/// @return 0 is success
|
|
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);
|
|
|
|
printk("xby-debug, diag_kallsyms_lookup_name is %p\n",
|
|
diag_kallsyms_lookup_name);
|
|
|
|
if (!diag_kallsyms_lookup_name) {
|
|
return -EINVAL;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int init_orig_fun(void) {
|
|
fn_kallsyms_lookup_name_init(); // init kallsyms_lookup_name
|
|
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
|
|
|
|
LOOKUP_SYMS_NORET(get_task_type); // get_task_type
|
|
LOOKUP_SYMS_NORET(kernfs_name); // kernfs_name
|
|
return 0;
|
|
}
|