ARM架构kprobe应用及实现分析(7.0 自动显示参数的值)

来源:互联网 发布:js获取当前页面内容 编辑:程序博客网 时间:2024/04/30 13:51

通过前面的介绍

知道参数在寄存器及堆栈的位置,我们就有可能显示参数的值

jprobe也可以显示参数的值,但是其有缺点:不能探测函数时加上偏移量

具体上下文请参考: ARM架构kprobe应用及实现分析(3.0 被探测函数说明)

导出参数的函数:

static int dump_arm_parameter(struct pt_regs *regs){      int i=0;   unsigned int * sp = regs->uregs[13];   printk(" func paras maybe : (0x%08x,0x%08x,0x%08x,0x%08x,0x%08x,0x%08x) \n",\                                    regs->uregs[0],\                                    regs->uregs[1],\                                    regs->uregs[2],\                                    regs->uregs[3],\                                    *sp,\                                    *(sp+1)\                                    );   return 0;}

使用情形:

static int handler_pre(struct kprobe *p, struct pt_regs *regs){        printk("shitshit kprobes name is %s pt_regs size is %d \n",p->symbol_name,sizeof(regs->uregs));        dump_arm_regs(regs->uregs);        dump_arm_stack((unsigned int *)regs->uregs[13],5);        dump_arm_parameter(regs);return 0;}

 

kernel log 输出如下:

func paras maybe : (0x00000011,0x00000022,0x00000033,0xc077c670,0x00000044,0x00000055)

与我们实际传入的一致

 

good luck

 

原创粉丝点击