gpt4 book ai didi

c - 访问内核 2.6+ 中的 sys_call_table

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:40 24 4
gpt4 key购买 nike

是否有可能从我自己的 Kernel 2.6+ 模块访问 sys_call_table?如果有人可以提供文章或操作方法的链接,我将不胜感激。我需要一种无需修改 Kernel 源代码的方法。我知道这在 Linux 2.4 内核 上很容易,您可以使用外部符号,但是此功能已从 Kernel 2.6 中删除。

最佳答案

因为你真正想做的是用你自己的函数替换系统调用,我建议使用 kprobes 来完成这种工作,你可以轻松地中断任何内核地址(或符号(例如 sys_exit,sys_whateversyscall)并改变执行路径,所有这些都在运行时进行,如果需要,可以使用内核模块 :) 它的开销非常低。

Kprobes(或 jprobes,如果您只是将代码添加到系统调用而不是完全替换它)通过用中断(例如 x86 上的 int3)动态替换指令(例如您的系统调用条目的第一条指令)来工作。在 do_int3 处理程序中,通知程序通知 kprobes,kprobes 依次将执行传递给您注册的函数,从这里您几乎可以做任何事情。

Documentation/kprobes.txt 中提供了一个非常好的文档,作为 samples/kprobes/kprobes_example.c 中的一个小示例(在这个示例中,它们中断 do_fork 以记录系统上的每个 fork)。它有一个非常简单的 API,现在非常便携。

关于c - 访问内核 2.6+ 中的 sys_call_table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com