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

本文详细介绍了在ARM架构中使用kprobe显示函数参数的方法,包括使用dump_arm_parameter函数来显示参数,并通过实际案例验证了其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过前面的介绍

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值