XenServer 6.0.0 및 DDK가 설치되었으며 커널 모듈을 개발하고자하므로 기본 kprobes 프로그램을 작성합니다. 그것은 레드햇과 같은 일반 리눅스에서 OK를 실행하고 "Before sys_ioctl"을 출력하지만 XenServer에서는 "Hypercall FI kernel module : init"만 출력하고 "Before sys_ioctl"을 출력 할 수 없습니다.DDK가있는 XenServer는 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");
Xen 서버에서 kprobe를 지원하지 않을 가능성이 있습니다./sys/kernel/debug/kprobes/enable에서 확인할 수 있습니다. –
@rakib 고맙습니다.하지만 RHEL 6.x와 같은 XenServer 나 일반 Linux와 상관없이'/ sys/kernel/debug'에'kprobes'라는 파일이 없습니다. –