摘要: Kprobes是一种运行时动态调试内核的机制, 你可以用它设置断点并收集调试信息, 甚至改变内核行为.Kprobes分三种, 普通kprobes以及基于普通kprobes的jprobes和kretprobes. kprobes可以注入某个地址, jprobes用来注入某个函数入口, 而kretprobes则用来注入某个函数返回.实现原理Kprobes的实现主要利用了处理器的异常和单步执行特性. 以普通kprobes举例, 注册时它会复制一份被注入的指令, 并加入断点(例如x86的int 3), 当CPU执行到被注入的指令时就会陷入到Kprobes中, 此时Kprobes先运行钩子函数”pre_ 阅读全文
posted @ 2013-12-29 16:22 jeremyatchina 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低。以内核模块的方式使用kprobes、jprobes,就可以在任意地址插入侦测器,执行包括printk在内的各种调试工作,而无须重新构建内核,也无须重启。一、首先内核必须支持kprobes、jprobes:#make menuconfigGeneral setup --->[*] Kprobes使内核支持kprobes。二、kprobes的使用方法:1、分配一个kprobe结构体供kprobes运行时使用。2、在kprobe结构体的addr成员中设置要插入侦测器的函数地址,可以 阅读全文
posted @ 2013-12-29 16:14 jeremyatchina 阅读(668) 评论(0) 推荐(0) 编辑