[英]Unable to register kprobe
我正在嘗試注冊一個 kprobe 來檢索系統調用的地址。 但我所有的嘗試似乎都返回 -22 作為錯誤代碼。 下面的示例代碼(不完整但包含相關函數)嘗試為sys_mkdir
調用注冊 kernel 探針。
如果我指定 pre 或 post 處理程序似乎並不重要,只是注冊探針不起作用。
注意:我正在嘗試使用 kprobes 替代在kallsyms_lookup_name
5.7 及更高版本中不再導出的未導出 kallsyms_lookup_name。
unsigned long lookup_name(const char *name)
{
int ret;
struct kprobe kp;
unsigned long retval;
kp.symbol_name = name;
ret = register_kprobe(&kp);
if (ret < 0) {
printk(KERN_DEBUG "register_kprobe failed for symbol %s, returned %d\n", name,
ret);
return 0;
}
retval = (unsigned long)kp.addr;
unregister_kprobe(&kp);
return retval;
}
static int __init mod_init(void)
{
int (*fn)(unsigned long param);
fn = (void*)lookup_name("__x64_sys_mkdir");
}
我正在嘗試注冊一個 kprobe 來檢索系統調用的地址。 但我所有的嘗試似乎都返回 -22 作為錯誤代碼。 下面的示例代碼(不完整但包含相關函數)嘗試為sys_mkdir
調用注冊 kernel 探針。
如果我指定 pre 或 post 處理程序似乎並不重要,只是注冊探針不起作用。
注意:我正在嘗試使用 kprobes 替代在kallsyms_lookup_name
5.7 及更高版本中不再導出的未導出 kallsyms_lookup_name。
unsigned long lookup_name(const char *name)
{
int ret;
struct kprobe kp;
unsigned long retval;
kp.symbol_name = name;
ret = register_kprobe(&kp);
if (ret < 0) {
printk(KERN_DEBUG "register_kprobe failed for symbol %s, returned %d\n", name,
ret);
return 0;
}
retval = (unsigned long)kp.addr;
unregister_kprobe(&kp);
return retval;
}
static int __init mod_init(void)
{
int (*fn)(unsigned long param);
fn = (void*)lookup_name("__x64_sys_mkdir");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.