0

XenServer 6.0.0 と DDK をインストールしました。カーネル モジュールを開発したいので、基本的な kprobes プログラムをコーディングします。RedHat などの通常の Linux では問題なく動作し、「Before sys_ioctl」を出力しますが、XenServer では「Hypercall FI kernel module: init」を出力するだけで、「Before 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");
4

1 に答える 1