劫持execve()是否暂时不可用?

时间:2015-09-02 16:42:08

标签: linux system-calls kernel-module

我有兴趣通过劫持系统调用来修改Linux以达到我自己的目的。我成功地劫持了open()ioctl()以及用于操纵扩展属性的系统调用。我试图用{:1>劫持execve()

asmlinkage int (*real_execve)(const char __user *,
                              const char __user *const __user *,
                              const char __user *const __user *);

asmlinkage int hijacked_execve(const char __user *filename,
                               const char __user *const __user *argv, 
                               const char __user *const __user *envp) {
    return real_execve(filename, argv, envp);
}

modifying the system call table。插入内核模块后,终端就会挂起。如果我输入一个命令然后按回车键,终端就像一个文本编辑器,它不会接受退格键或对Ctrl + X或Ctrl + C作出反应,如下所示:

main@vm:~/hijack_execve$ sudo insmod hijack_execve.ko
[sudo] password for main:
main@vm:~/hijack_execve$ <any command>
^C^X

奇怪的是,只要它保持与上面相同的形式,我就可以劫持mmap(),只将参数传递给真实的mmap()。任何人都知道这里可能出现什么问题?我想知道劫持execve()的过程是否在修改系统调用表期间使其不可用,并且在此期间需要execve()来完成操作。

0 个答案:

没有答案