Linux kernel 带有DDK的XenServer不';你不支持kprobe吗?

Linux kernel 带有DDK的XenServer不';你不支持kprobe吗?,linux-kernel,kernel-module,xen,kprobe,Linux Kernel,Kernel Module,Xen,Kprobe,我安装了XenServer 6.0.0和DDK,我想开发一个内核模块,所以我编写了一个基本的kprobes程序。它在普通linux(如redhat)上运行正常,并输出“在sys_ioctl之前”,但在XenServer上它只输出“Hypercall FI内核模块:init”,而不能输出“在sys_ioctl之前” 那么,原因是什么?XenServer不支持Kprobes或者我的程序有bug 这是我的简单代码kp.addr根据cat/proc/kallsyms | grep sys_ioctl不同

我安装了XenServer 6.0.0和DDK,我想开发一个内核模块,所以我编写了一个基本的kprobes程序。它在普通linux(如redhat)上运行正常,并输出“在sys_ioctl之前”,但在XenServer上它只输出“Hypercall FI内核模块:init”,而不能输出“在sys_ioctl之前”

那么,原因是什么?XenServer不支持Kprobes或者我的程序有bug

这是我的简单代码
kp.addr
根据
cat/proc/kallsyms | grep sys_ioctl
不同,我尝试了
do_fork
,问题也存在

#include <linux/kprobes.h>
#include <linux/kallsyms.h>
#include <linux/module.h>

static struct kprobe kp;

int handler_pre_target(struct kprobe *p, struct pt_regs *regs)
{
    printk("Before sys_ioctl\n");
    return 0;
}

static int __init myinit(void)
{
    kp.addr = (kprobe_opcode_t *) 0xc048498d;
    kp.pre_handler = handler_pre_target;
    register_kprobe(&kp);
    printk("Hypercall FI kernel module: init\n");
    return 0;
}

static void __exit myexit(void)
{
    unregister_kprobe(&kp);
    printk("Hypercall FI kernel module: exit\n");
}

module_init(myinit);
module_exit(myexit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("fg");
MODULE_DESCRIPTION("Hypercall test");
#包括
#包括
#包括
静态结构kprobe kp;
int handler_pre_目标(结构kprobe*p,结构pt_regs*regs)
{
printk(“在sys_ioctl\n之前”);
返回0;
}
静态int\uu init myinit(void)
{
kp.addr=(kprobe_操作码_t*)0xc048498d;
kp.pre_handler=handler_pre_目标;
登记表(kprobe&kp);
printk(“Hypercall FI内核模块:init\n”);
返回0;
}
静态void\uu退出myexit(void)
{
取消注册_kprobe(&kp);
printk(“Hypercall FI内核模块:退出\n”);
}
模块_init(myinit);
模块_退出(myexit);
模块许可证(“GPL”);
模块作者(“fg”);
模块描述(“超级球测试”);

最后,我解决了这个问题。 我使用了XenServer6.1和6.1.0DDK,这没关系

内核版本是:
2.6.32.43-0.4.1.xs1.6.10.741.170752xen


我怀疑这是一个无法在XenServer 6.0中使用kprobe的错误。

您的Xen服务器上可能没有kprobe支持。您可以从/sys/kernel/debug/kprobes/enable进行检查。@rakib谢谢,但是在
/sys/kernel/debug
中没有名为
kprobes
的文件,无论是XenServer还是RHEL 6.x等普通linux。