static struct kprobe kp
=
{
.symbol_name
=
"kallsyms_lookup_name"
,
};
int
get_kallsyms_lookup_name(void)
{
int
ret
=
register_kprobe(&kp);
if
(ret <
0
){
printk(
"[err] %s. register_kprobe failed, ret:%d\n"
, __FUNCTION__, ret);
return
ret;
}
printk(
"[info] %s. kprobe at addr:%p, ret:%d\n"
, __FUNCTION__, kp.addr, ret);
orig_kallsyms_lookup_name
=
(kallsyms_lookup_name_t)(void
*
)kp.addr;
unregister_kprobe(&kp);
return
ret;
}
static
int
__init init(void)
{
if
(get_kallsyms_lookup_name() <
0
){
printk(
"[err] %s failed!\n"
, __FUNCTION__);
return
-
1
;
}
___vmalloc_node_range
=
(void
*
)orig_kallsyms_lookup_name(
"__vmalloc_node"
);
if
(!___vmalloc_node_range)
printk(
"失败"
);
return
-
1
;
}