我安装了 XenServer 6.0.0 和 DDK,我想开发一个内核模块,所以我编写了一个基本的 kprobes 程序。它在redhat等普通linux上运行正常并输出“在sys_ioctl之前”,但在XenServer上它只输出“Hypercall FI内核模块:init”,不能输出“在sys_ioctl之前”。
那么,是什么原因呢?XenServer 不支持 Kprobes 或我的程序有错误?
这是我的简单代码。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");