Linux 劫持、读取和bash崩溃(caf用户?)

Linux 劫持、读取和bash崩溃(caf用户?),linux,linux-kernel,kernel-module,Linux,Linux Kernel,Kernel Module,我正在劫持\uu NR\u read(sys\u readcall),每次我用自己的syscall劫持原始syscall时,它都会导致bash(在所有打开的KDE“konsoles”中)崩溃(也就是说,只要我劫持sys\u open) 我想知道这是我的代码中的一个bug(可能),还是因为其他原因 我的问题是:如果崩溃是由我的代码引起的,那么到底是什么导致的,以及如何(如果可能)修复它?如果崩溃不是由我的代码引起的,是什么引起的 我的代码在这里: syshijack.c是获取系统调用表的地方,ho

我正在劫持
\uu NR\u read
sys\u read
call),每次我用自己的syscall劫持原始syscall时,它都会导致bash(在所有打开的KDE“konsoles”中)崩溃(也就是说,只要我劫持
sys\u open

我想知道这是我的代码中的一个bug(可能),还是因为其他原因

我的问题是:如果崩溃是由我的代码引起的,那么到底是什么导致的,以及如何(如果可能)修复它?如果崩溃不是由我的代码引起的,是什么引起的

我的代码在这里:

syshijack.c
是获取系统调用表的地方,
hookfns.c
是劫持系统调用的地方

PS:我之前已经问过这个问题,但现在它变了,因为一旦我劫持系统调用就会发生崩溃

*编辑*

我认为这个bug来自hook/unhook调用,所以我制造了一个问题
无论如何,我看不出是什么导致了崩溃/冻结。

钩子引擎在我的
x86\u 64
上运行良好,没有
IA32
部分,也没有
hooked\u sys\u read
中的代码,除了
r=real\u sys\u read()
。挖掘您的代码我发现IA32挂钩可能存在以下问题:

#define HOOK(F, RF, FF) RF = sys_call_table[F]; sys_call_table[F] = FF;
#ifdef CONFIG_IA32_EMULATION
    #define HOOK_IA32(F, RF, FF) ia32_sys_call_table[F] = FF;
#endif
。。因此,
HOOK_IA32
不会存储在
HOOK
宏中实现的
RF
值。看看吧

至于其他人。。。从_fd来的路径在我看来很难看


祝你好运;)

对不起,之前没有回答。我当时在办公室。的确,HOOK IA32宏中有一个bug。我只是推了个补丁。无论如何,这不是问题所在。每当我调用hook/unhook几次时,我正在测试的虚拟机就会一直冻结。嘿,你知道
VirtualBox
(可能是其他虚拟机)没有正确地模拟
sidt
指令吗?我发现在我的例子中,
sidt
返回了错误的值,并使用了不同的符号查找方法来获取
sys\u call\u table
条目。看来你也有同样的问题…哦。那么,也许我的模块在真正的机器上运行得很好?我不愿意在我真正的机器上测试,但也许我应该。让我试试看,这是个糟糕的决定。它只是冻结了我的整个机器,我不得不关掉它(