Я установил XenServer 6.0.0 и DDK, и я хочу разработать модуль ядра, поэтому я кодирую базовую программу kprobes. Он работает нормально на обычном Linux, например redhat, и выводит «Before sys_ioctl», но на XenServer он просто выводит «Модуль ядра Hypercall FI: init» и не может выводить «Before sys_ioctl».XenServer с DDK не поддерживает Kprobes?
Итак, в чем причина? 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");
Вероятно, у вас нет поддержки kprobe на вашем сервере Xen. Вы можете проверить его из/sys/kernel/debug/kprobes/enable. –
@rakib Спасибо, но нет файла с именем 'kprobes' в'/sys/kernel/debug', независимо от XenServer или обычного Linux, такого как RHEL 6.x. –