리눅스 커널을 위한 디버깅 메커니즘이며 실운영 시스템 안에서 이벤트 모니터링을 위해 사용되어지기도 한다.
include/linux/kprobes.h
struct kprobe { struct hlist_node hlist; struct list_head list; unsigned long nmissed; kprobe_opcode_t *addr; const char *symbol_name; unsigned int offset; kprobe_pre_handler_t pre_handler; kprobe_post_handler_t post_handler; kprobe_fault_handler_t fault_handler; kprobe_break_handler_t break_handler; kprobe_opcode_t opcode; struct arch_specific_insn ainsn; u32 flags; };
typedef int (*kprobe_pre_handler_t)(struct kprobe*, struct pt_regs*); typedef void (*kprobe_post_handler_t)(struct kprobe*, struct pt_regs*, unsigned long flags); typedef int (*kprobe_fault_handler_t)(struct kprobe*, struct pt_regs*, int trapnr); int register_kprobe(struct kprobe *p); int unregister_kprobe(struct kprobe *p);
참고
–kprobes 동작 방식(1)
–kprobes 동작 방식(2)
–An introduction to KProbes
–arm에서 kprobes 사용하기(1)
–arm에서 kprobes 사용하기(2)