md.*_*mal 3 linux debugging linux-kernel
kprobes 和 kretprobes 都允许您将探针放在内核地址中的特定指令上。
如果注册 kprobe,则 pre_handler 在实际函数之前执行,post_handler 在实际函数之后执行
使用kretprobes,您可以让entry_handler在实际函数之前执行,并让ret_handler在实际函数之后执行,并且它包含函数调用的返回值。
那么,使用 kprobes 相对于 kretprobes 的优势是什么,因为 kretprobes 具有 kprobes 的特性加上函数的返回值
kprobe 可以放置在任何指令上,而不仅仅是内核函数的开头(当然,如果给定的内核代码中允许使用 kprobe)。kprobe 的处理程序在指令之前和之后运行。
Kretprobes 仅对探测函数入口和出口有意义。kretprobe 的处理程序在函数入口处和退出处运行,而不是像 kprobe 处理程序那样在某些指令之前和之后运行。
此外,如果您不需要在函数出口处运行代码,则对于探测函数,kprobes 可能比 kretprobes 更好(尽管Ftrace可能更好)。Kretprobes 干预堆栈上函数的返回地址以执行处理程序。如果函数因其他原因崩溃或转储回溯,则回溯可能包括 kretprobe 内部地址而不是真正的返回地址,这可能会令人困惑。
https://www.kernel.org/doc/Documentation/kprobes.txt
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |