带有 DDK 的 XenServer 不支持 Kprobes?



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

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

这是我的简单代码。基于cat /proc/kallsyms | grep sys_ioctlkp.addr是不同的,我尝试了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_ioctln");
    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: initn");
    return 0;
}
static void __exit myexit(void)
{
    unregister_kprobe(&kp);
    printk("Hypercall FI kernel module: exitn");
}
module_init(myinit);
module_exit(myexit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("fg");
MODULE_DESCRIPTION("Hypercall test");

最后,我解决了这个问题。我使用了XenServer 6.1和6.1.0的ddk,这是OK的。

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

我怀疑这是一个错误,不能使用kprobes在XenServer 6.0

最新更新