kprobe

来源:互联网 发布:zabbix snmp windows 编辑:程序博客网 时间:2024/04/30 10:20

kprobe是内核提供的探测内核代码的一种机制,有助于开发人员跟踪内核代码运行状态。

1,three types

--Kprobes, Jprobes, Return Probes


2, arch support

--- i386
---arm

---...

 

3,configs

--CONFIG_KPROBES

--CONFIG_MODULES

--CONFIG_MODULE_UNLOAD

--CONFIG_KALLSYMS

--CONFIG_KALLSYMS_ALL

--CONFIG_DEBUG_INFO

 

4,API

register_kprobe

#include <linux/kprobes.h>
int register_kprobe(struct kprobe *kp);

 

 

User's pre-handler (kp->pre_handler):

#include <linux/kprobes.h>
#include <linux/ptrace.h>
int pre_handler(struct kprobe *p, struct pt_regs *regs);

 

User's post-handler (kp->post_handler):

#include <linux/kprobes.h>
#include <linux/ptrace.h>
void post_handler(struct kprobe *p, struct pt_regs *regs,
        unsigned long flags);

 

User's fault-handler (kp->fault_handler):

#include <linux/kprobes.h>
#include <linux/ptrace.h>
int fault_handler(struct kprobe *p, struct pt_regs *regs, int trapnr);

 

 

register_jprobe

#include <linux/kprobes.h>
int register_jprobe(struct jprobe *jp)

 

register_kretprobe

#include <linux/kprobes.h>
int register_kretprobe(struct kretprobe *rp);

 

User's return-probe handler (rp->handler):

#include <linux/kprobes.h>
#include <linux/ptrace.h>
int kretprobe_handler(struct kretprobe_instance *ri, struct pt_regs *regs);

 

unregister_*probe

#include <linux/kprobes.h>
void unregister_kprobe(struct kprobe *kp);
void unregister_jprobe(struct jprobe *jp);
void unregister_kretprobe(struct kretprobe *rp);

 

register_*probes
#include <linux/kprobes.h>
int register_kprobes(struct kprobe **kps, int num);
int register_kretprobes(struct kretprobe **rps, int num);
int register_jprobes(struct jprobe **jps, int num);

 

unregister_*probes
#include <linux/kprobes.h>
void unregister_kprobes(struct kprobe **kps, int num);
void unregister_kretprobes(struct kretprobe **rps, int num);
void unregister_jprobes(struct jprobe **jps, int num);

 

disable_*probe
#include <linux/kprobes.h>
int disable_kprobe(struct kprobe *kp);
int disable_kretprobe(struct kretprobe *rp);
int disable_jprobe(struct jprobe *jp);

 

enable_*probe
#include <linux/kprobes.h>
int enable_kprobe(struct kprobe *kp);
int enable_kretprobe(struct kretprobe *rp);
int enable_jprobe(struct jprobe *jp);

 

http://lxr.linux.no/linux+v2.6.31/samples/kprobes/

 

http://lxr.linux.no/linux+v2.6.31/Documentation/kprobes.txt

原创粉丝点击