31 lines
1001 B
C
31 lines
1001 B
C
#include "my_kallsyms_lookup_name.h"
|
|
unsigned long (*g_kallsyms_lookup_name_fun)(const char *name) = NULL;
|
|
|
|
int kallsyms_lookup_name_pre(struct kprobe *p, struct pt_regs *regs) {
|
|
return 0;
|
|
}
|
|
static struct kprobe kp_kallsyms_lookup_name = {
|
|
.symbol_name = "kallsyms_lookup_name",
|
|
};
|
|
|
|
// 调用kprobe找到kallsyms_lookup_name的地址位置
|
|
int init_kallsyms_lookup_name_i(void) {
|
|
int ret = -1;
|
|
kp_kallsyms_lookup_name.pre_handler = kallsyms_lookup_name_pre;
|
|
ret = register_kprobe(&kp_kallsyms_lookup_name);
|
|
if (ret < 0) {
|
|
printk(KERN_INFO "register_kprobe failed, error:%d\n", ret);
|
|
return ret;
|
|
}
|
|
printk(KERN_INFO "kallsyms_lookup_name addr: %p\n",
|
|
kp_kallsyms_lookup_name.addr);
|
|
g_kallsyms_lookup_name_fun = (void *)kp_kallsyms_lookup_name.addr;
|
|
unregister_kprobe(&kp_kallsyms_lookup_name);
|
|
return ret;
|
|
}
|
|
|
|
bool init_kallsyms_lookup_name(void) {
|
|
init_kallsyms_lookup_name_i();
|
|
return g_kallsyms_lookup_name_fun != NULL;
|
|
}
|