- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个内核模块,在其中 Hook 系统调用表并重定向许多系统调用。我用两种方法做到了这一点。传统方法是找到系统调用表的地址并使内存读写,如here所述。 ,对于 exec 和 fork 等情况,我搜索相关函数符号( do_fork
、 do_execve
),并将其引用替换为我自己的函数的引用,例如 did here .
我目前正在尝试 Hook 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 个不同的头文件中,具有各种不同的值。
我也尝试使用第二种方法来 Hook 它,但无法找到相关的函数,即 sys_send
如do_fork
是sys_fork
.
有人可以告诉我 1) 在哪里可以找到 __NR_send
的正确值吗?这样我就可以从系统调用表中 Hook 它,2)包含为 sys_send
执行的实际 C 代码的函数的名称是什么?喜欢 do_fork
为sys_fork
做它位于哪个文件中,或者更好的是两者都存在?
最佳答案
又找了几个小时,终于发现sys_send是在Linux/net/socket.c
中通过宏定义的
SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
unsigned int, flags)
{
return sys_sendto(fd, buff, len, flags, NULL, 0);
}
然后可以使用__NR_sendto
简单地 Hook sys_sendto并检查NULL参数以了解调用最初是send还是sendto。
关于c - Hook sys_send,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25185488/
我正在编写一个内核模块,在其中 Hook 系统调用表并重定向许多系统调用。我用两种方法做到了这一点。传统方法是找到系统调用表的地址并使内存读写,如here所述。 ,对于 exec 和 fork 等情况
我是一名优秀的程序员,十分优秀!