问题标签 [kprobe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1266 浏览

linux-kernel - register_kprobe 正在返回 -2

我正在尝试挂钩一些内核函数以用于学习目的,我在下面编写了简单的内核模块,但由于某些原因,register_kprobe总是返回 -2。我没有发现它所说的这个错误意味着什么,也不知道如何继续。起初我以为是因为它list_add是一个内联函数,所以我尝试将其替换为kvm_create_vm并得到相同的结果。然后我检查/proc/kallsyms并发现两者都没有出现在那里。所以我选择了kvm_alloc哪个是导出的,但我仍然得到错误-2。我也试过alloc_uid,但这工作得很好。

我的问题:可以连接什么样的功能kprobes

编辑

我划过的线是我感到困惑的主要原因。我错过了拼写kvm_alloc,它应该kvmalloc没有下划线。这个功能很好地被钩住了。

0 投票
1 回答
689 浏览

linux - kprobe机制拦截do_page_fault

我试图拦截__do_page_fault()linux内核中的方法。正常的注册方式kprobes,即定义kp.addr

不管用。这样做的正确方法是什么?

编辑:任何其他拦截 do_page_fault 的方法也适用于我。

0 投票
0 回答
17 浏览

linux - 在 Jprobes 模块中设置它们后的寄存器值不一致

这个问题是我之前关于Intercepting ELF loader的问题的延续。

现在确切的问题是,以前代码逻辑是在load_elf_binary函数中实现的,其中函数寄存器的末尾是eax, ebx, ecx and edx通过内联 asm 调用设置的,就在函数返回之前。

我已经jprobeload_elf_binary函数上植入了一个,因为我需要访问struct linux_binprm *bprm参数,但是由于我在 jprobe 处理程序中设置了寄存器值,因此当控件返回到实际函数并且应用程序以分段错误终止时会导致不一致。

有什么可能的解决方案?

0 投票
1 回答
581 浏览

linux - 函数中间的 Kprobe/Jprobe

我想拦截文件中的load_elf_binary函数,fs/binfmt_elf.c从通过参数传递给它的文件中读取一些自定义节标题,并在从函数返回之前设置一些寄存器(eax、ebx、ecx、edx)。

现在我读到 Jprobes 是访问目标函数参数的好方法,但问题是一旦控制从 Jprobes 函数返回,寄存器和堆栈值就会按照它的规范恢复,所以我正在寻找一种解决方法并且可能在函数的中间插入一个探针(最好是在最后)将是一个好主意。如果我错了,请纠正我并提供帮助。

0 投票
1 回答
1809 浏览

linux-kernel - 在 kretprobe 处理程序中获取函数的返回值

我想知道是否可以将 kretprobe 挂接到内核函数上并在 kretprobe 的返回处理程序中捕获它的返回值。

0 投票
1 回答
491 浏览

linux-kernel - 两个内核 kprobes/kretprobes 之间的通信

是否可以使用 kretprobe 捕获内核函数的返回值并将其传递给另一个连接到另一个内核函数的 kretprobe。

0 投票
1 回答
831 浏览

linux-kernel - register_kretprobe 失败,返回值为 -2

我编写了一个 kretprobe 来连接 fs/binfmt_elf.c 文件中提到的 randomize_stack_top() 函数。在使用 insmod 加载 LKM 时,register_kretprobe() 调用失败,返回值为 -2。我该如何调试/纠正它以启动我的模块?

0 投票
1 回答
405 浏览

linux-kernel - 从 Kprobe 处理程序打开/写入文件

我正在编写一个用于跟踪特定系统调用的 Linux 内核模块,并且我需要从处理程序(特别是 a )Kprobes中写入文件。我知道通常不建议这样做,但我需要将输出写入一个非常具体的位置,所以我不能使用任何标准的日志记录机制。KProbeKretprobe

我可以从模块中的函数打开/写入正常init(),但是当我尝试从探测处理程序中这样做时,内核崩溃了。

0 投票
1 回答
604 浏览

linux - jprobe do_execve 不适用于内核 4.1

我想在 do_execve 上设置一个 jprobe 钩子来捕获每个执行的程序。

我的代码正在<= 3.2 linux内核(debian)上运行。这是我在 linux 内核 3.2 上的输出:

在 4.1 内核上,我得到相同的结果(所有内容都已注册),但没有“execve”:

这是我的代码:

当我在 kallsyms 上执行 grep 时,我得到了 3.2:

在 4.2 上:

我什至尝试将函数(因为 do_execve 原型已更改)更改为:

甚至没有帮助。

我可以在 do_fork 或 sys_open 等其他函数上设置挂钩,但不能在 do_execve 上设置。为什么?有人有想法吗?为什么它不再工作了?

编辑:

我也在挂钩 do_execveat:

0 投票
1 回答
614 浏览

linux - 如何在 kprobe 中使用寄存器?

来自kprobe 文档

据我了解,在X86_64平台上,参数应该传递到寄存器中(请参阅X86_64 syscalls)。所以我认为添加探针应该是这样的:

但是执行上面的语句,bash报错:

所以我的问题是:如何使用寄存器kprobe?哪些寄存器有效?