【发布时间】:2014-09-30 20:53:17
【问题描述】:
我正在编写一个内核模块,我在其中挂钩系统调用表并重定向许多系统调用。我用两种方法做到了这一点。找到系统调用表的地址并将内存 rw 描述为here 的传统方法,对于 exec 和 fork 等情况,我搜索相关的函数符号(do_fork,do_execve)并替换其参考我自己的功能,例如完成here。
我目前正在尝试挂钩sys_send,但遇到了几个问题。当我尝试以传统方式进行时:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <asm/paravirt.h>
ref_sys_send = (void *)sys_call_table[__NR_send];
sys_call_table[__NR_send] = (unsigned long *)new_sys_send;
我得到错误:
error: ‘__NR_send’ undeclared (first use in this function)
我在 lxr 中搜索,发现__NR_send 定义在大约 16 个不同的头文件中,具有各种不同的值。
我也尝试使用第二种方法挂钩它,但无法找到sys_send的相关函数,因为do_fork是sys_fork。
谁能告诉我 1) 在哪里可以找到 __NR_send 的正确值,以便我可以从系统调用表中挂钩它,2) 包含为 sys_send 执行的实际 c 代码的函数的名称是什么就像do_fork 对sys_fork 所做的那样,它位于什么文件中,或者两者都更好?
【问题讨论】:
标签: c linux kernel-module