Chinaunix
标题:
从内核态调用用户空间的程序
[打印本页]
作者:
marksman201
时间:
2010-02-23 16:33
标题:
从内核态调用用户空间的程序
在内核态调用用户空间本身不是一个好的想法,这样做可能会影响内核的稳定.如果确实有这种需求,可以考虑在用户空间做一个deamon程序来实现类似的功能.
不过,这里还是给一个例子,来实现从内核调用用户空间的程序,仅当娱乐:
#include
#include
#include
static int my_execve(const char *filename,char *const argv[], char *const envp[])
{
long __res;
__asm__ volatile ("int $0x80"
:"=a" (__res)
: "0" (__NR_execve),"b"
((long)(filename)),"c"((long)(argv)),"d"((long)(envp)));
return (int) __res;
}
static int exec_cmd(void *filename)
{
//may be need envp and argv
//char *envp[] = { "HOME=/","TERM=linux","PATH=/sbin:/usr/sbin:",NULL};
//char *argv[] = { "/bin/ls","-l","/tmp/",NULL};
int ret;
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
ret = my_execve((char*)filename,NULL,NULL);
printk("execve failed :%s\n",(char*)filename);
set_fs(old_fs);
return ret;
}
int init_module(void)
{
int pid;
pid = kernel_thread(exec_cmd,"./helloworld",0);
if( pid < 0) {
printk(KERN_ERR "kernel_thread failed.\n");
return pid;
}
return 0;
}
void cleanup_module(void)
{
return;
}
在用户空间随便写一个helloworld程序,然后和这个模块放在同一个目录下,就可以了.
最后还是建议最好不要这样做.
本文来自ChinaUnix博客,如果查看原文请点:
http://blog.chinaunix.net/u2/86590/showart_2185233.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2