linux-kernel – 未定义的异常处理程序(__und_svc)在kprobes中的
我试图将kprobe转换为可加载的内核模块.
我可以运行samples / kprobes /文件夹中的可用示例 如果我们在内核中配置kprobes(CONFIG_KPROBES),那么svc_entry宏将在__und_svc()处理程序中以64字节扩展. 参考: 我的目标是没有触及内核端,使kprobe成为内核模块. 因此编译内核时不启用CONFIG_KPROBES.所以svc_entry宏将以0 in扩展 我想从这些疑虑中解脱出来. >如果kprobe处理未定义的指令异常(bcos kprobe 请分享您的知识. 解决方法
您可能无法获得响应,因为您对事物的理解不是很好,并且linux-arm-kernel列表上的任何人都需要一些时间来响应.阅读
kprobes.txt并详细研究ARM体系结构.
在ARM上,模式0b11011是未定义的指令模式.未定义指令发生时的流程是, > lr_und = pc的undef指令4 第四步的主矢量表位于 kprobe的工作原理是将未定义的指令放在您想要探测的代码地址上.即,它涉及未定义的指令处理程序.这应该是非常明显的.它调用两个例程,
不它不是.您可以使用其他机制,但可能必须修改kprobes代码.您很可能必须限制功能.也可以完全重写堆栈帧并在事后保留额外的64字节.它不是kmalloc()中的分配.它只是从管理程序堆栈指针中添加/减去一个数字.我猜测代码会从未定义的处理程序重写返回地址,以在kprobed地址的上下文(ISR,下半部分/线程IRQ,work_queue,内核任务)中执行.但是,您可能还有其他问题尚未遇到.如果永远不会调用arch_init_kprobes(),那么您可以随时在__und_svc中进行预留;它只占用64个字节的堆栈,这将使内核堆栈更有可能溢出.即,改变, __und_svc: @ Always reserve 64 bytes,even if kprobe is not active. svc_entry 64 arch_init_kprobes()实际上是安装该功能的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |