ARM架構kprobe應用及實現分析(7.0 自動顯示參數的值)

通過前面的介紹

知道參數在寄存器及堆棧的位置,我們就有可能顯示參數的值

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章