kprobe

리눅스 커널을 위한 디버깅 메커니즘이며 실운영 시스템 안에서 이벤트 모니터링을 위해 사용되어지기도 한다.

kprobes1

kprobes2

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)

 

댓글 남기기