
kprobe
文章平均质量分 79
李子
天若有情天亦老
月若无恨月长圆
展开
-
ARM架构kprobe应用及实现分析(2.0 register_kprobe error 38)
最开始 register_kprobe 的时候,返回错误,一直注册不成功,且返回错误号为38最后发现是一些kernel编译的配置没有打开导致的.所以当你编译kernel之前请确保下面选项是打开支持的: general setup --> kprobesCONFIG_OPTPROBES=yCONFIG_PREEMPT=yCONFIG_OPTPROBES=原创 2013-11-16 22:38:31 · 2401 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
// ARM 架构注册kprobeint __kprobes arch_prepare_kprobe(struct kprobe *p){ kprobe_opcode_t insn; kprobe_opcode_t tmp_insn[MAX_INSN_SIZE]; unsigned long addr = (unsigned long)p->addr; bool thumb原创 2013-11-19 22:48:54 · 2091 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(10 trap中断注册及回调)
首先可以看下探测点检测到非法指令时候,产生中断的dump_stack:symbol] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c)symbol] (dump_stack+0x0/0x1c) from [] (handler_pre+0x144/0x19c [kk])symbol] (handler_pre+0x0/0原创 2013-11-19 22:55:29 · 2235 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(8.0 register_kprobe实现)
int __kprobes register_kprobe(struct kprobe *p){ int ret = 0; struct kprobe *old_p; struct module *probed_mod; kprobe_opcode_t *addr; //返回要探测的决定地址 addr = kprobe_addr(p); if (IS_原创 2013-11-19 22:42:43 · 2122 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(7.0 自动显示参数的值)
通过前面的介绍知道参数在寄存器及堆栈的位置,我们就有可能显示参数的值jprobe也可以显示参数的值,但是其有缺点:不能探测函数时加上偏移量具体上下文请参考: ARM架构kprobe应用及实现分析(3.0 被探测函数说明)导出参数的函数:static int dump_arm_parameter(struct pt_regs *regs){ int i=0;原创 2013-11-19 22:36:46 · 1839 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(5.0 打印寄存器的值)
kp.pre_handler = handler_pre;在此函数中打印寄存器的值,才能对我们分析当时的情况有帮助。(如查看调用函数的参数值等)static int handler_pre(struct kprobe *p, struct pt_regs *regs){ printk(" kprobes name is %s pt_regs size is %d \n原创 2013-11-17 10:58:07 · 2602 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(1.0 简单示例)
网络对krpobe的实现机制及扩展都不是特别详细由于工作需要及个人爱好,正好有这个机会好好学习此模块及应用到实际中并将整个应用扩展及当时的分析情况,详细记录下来,希望对感兴趣的人有些许帮助最开始还是先给个具体的栗子: static struct kprobe kp = { //.symbol_name = "do_fork", .symbol_name =原创 2013-11-16 22:24:36 · 2010 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(3.0 被探测函数说明)
在此系列中都是探测 testAddadd5 ,作为分析入口,我在do_fork 函数的最后的位置调用了testAddadd5 ,具体模样如下:int mykProbeCount = 0;char * mytestbuf ="this is a mytestbuf";int testAddadd5(int a, int b,int c,char * buf,int d,int原创 2013-11-16 22:45:13 · 1548 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(6.0 导出堆栈的值)
上篇讲过了导出寄存器的值但是当函数参数多余4个的话(R0 R1 R2 R3 ),其他的值会保存在堆栈中,所以必须导出SP附近的值才能查看其它参数的值此函数实现如下:第一个参数为SP的值,第二个是一SP为中心要打印周围栈的数据static int dump_arm_stack(unsigned int * _addr , unsigned int addrSize){原创 2013-11-17 11:13:33 · 1647 阅读 · 0 评论 -
ARM架构kprobe应用及实现分析(11 原理)
1 拷贝探测的code , 插入特殊指令(ARM是插入未定义指令)2 CPU运行到未定义指令,会产生trap, 进入ISR,并保存当前寄出去的状态 通过LINUX的通知机制,会执行“pre_handler”(前提是你已经注册过了)3 进入单步模式,运行你备份出来的代码 (此代码运行的是拷贝出来的,防止别的CPU也恰巧运行到此位置)4 单步模式后,运行“post_handler原创 2013-12-03 22:31:02 · 3226 阅读 · 0 评论