【发布时间】:2015-09-25 22:39:39
【问题描述】:
是否可以使用 kretprobe 捕获内核函数的返回值并将其传递给另一个 kretprobe,该 kretprobe 连接到另一个内核函数。
【问题讨论】:
-
如果两个探针的处理程序都在同一个模块中声明,它们可以像往常一样进行通信(通过模块的变量)。
-
@Tsyvarev 所以基本上你是说我应该在一个模块中为两个返回探针编写代码并通过全局变量在它们的处理程序之间进行通信?
-
是的,这是个好办法。
-
好吧,由于我是内核编程的新手,我想知道如何捕获我们正在植入返回探针的函数的返回值。我想做的是做两个返回探针,一个连接到 fs/binfmt_elf.c 文件中的 load_elf_binary() 函数,另一个连接到在 load_elf_binary 函数中调用的 randomize_stack_top() 函数。现在我想在第一个探针中使用 randomize_stack_top() 返回的值。
-
只需将 `randomize_stack_top` 的返回值在其 kretprobe 处理程序中存储到某个模块的全局变量中,然后在 kretprobe 处理程序中读取此变量以获取
load_elf_binary。
标签: linux-kernel kernel kernel-module kprobe