替换Linux内核3中的系统调用

发布于 2024-12-18 12:51:01 字数 344 浏览 2 评论 0原文

我有兴趣用我将在 Linux 内核 3 中实现的自定义替换系统调用。 我读到系统调用表不再公开。

有什么想法吗?

任何对此的引用 http://www.linuxtopia.org/online_books/linux_kernel /linux_kernel_module_programming_2.6/x978.html 示例,但对于内核 3 将不胜感激:)

谢谢!

I am interested in replacing a system call with a custom that I will implement in linux kernel 3.
I read that the sys call table is no longer exposed.

Any ideas?

any reference to this http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x978.html example but for kernel 3 will be appreciated :)

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一笔一画续写前缘 2024-12-25 12:51:02

我建议使用 kprobes 来完成此类工作,您可以轻松地中断任何内核地址(或符号...)并更改执行路径,所有这些都在运行时进行,如果需要,可以使用内核模块:)

Kprobes 工作通过用中断(例如 x86 上的 int3)动态替换指令(例如系统调用条目的第一条指令)。在 do_int3 处理程序内部,通知程序会通知 kprobes,后者又将执行传递给您注册的函数,从这里您几乎可以执行任何操作。

Documentation/kprobes.txt 中给出了非常好的文档,因此作为一个小小的samples/kprobes/kprobes_example.c (在此示例中,它们在 do_fork 上中断以记录系统上的每个分叉)。它有一个非常简单的 API,并且现在非常便携。

警告:如果您需要更改执行路径,请确保您的 kprobes 未优化(即处理程序的 jmp 指令会替换您中断的指令而不是 int3),否则您将无法能够真正轻松地改变执行(在函数 ret 之后,系统调用函数仍将照常执行)。如果您只对跟踪感兴趣,那么这很好,您可以放心地忽略这个问题。

I would recommend using kprobes for this kind of job, you can easily break on any kernel address (or symbol...) and alter the execution path, all of this at runtime, with a kernel module if you need to :)

Kprobes work by dynamically replacing an instruction (e.g. first instruction of your syscall entry) by a break (e.g. int3 on x86). Inside the do_int3 handler, a notifier notifies kprobes, which in turn passes the execution to your registered function, from which point you can do almost anything.

A very good documentation is given in Documentation/kprobes.txt so as a tiny example in samples/kprobes/kprobes_example.c (in this example they break on do_fork to log each fork on the system). It has a very simple API and is very portable nowdays.

Warning: If you need to alter the execution path, make sure your kprobes are not optimized (i.e. a jmp instruction to your handler replaces the instruction you break onto instead of an int3) otherwize you won't be able to really alter the execution easily (after the ret of your function, the syscall function will still be executed as usual). If you are only interested in tracing, then this is fine and you can safely ignore this issue.

今天小雨转甜 2024-12-25 12:51:02

写一个LKM会是更好的选择。你所说的替换是什么意思,你想添加一个新的吗?

Write a LKM that would be better optio.What do you mean by replace,do you want to add a new one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文