call_usermodehelper()函数分析(内核态调用用户态函数)

如何在Linux内核中执行某些用户态程序或系统命令?在用户态中,可以通过execve()实现;在内核态,则可以通过call_usermodehelpere()实现该功能。如果您查阅了call_usermodehelper()内核函数的源码实现,就可以发现该函数最终会执行do_execve()。而execve系统调用在经历内核的系统调用流程后,也会最终调用do_execve()。

 

代码实例

1 内核态调用用户态reboot命令

#include <linux/kernel.h>

#include <linux/module.h>

#include <linux/init.h>

 

static int __init test_init(void){

int ret=-1;

char path[]="/sbin/reboot";

char *argv[]={path,NULL};

char *envp[]={NULL};

printk("call_usermodehelper module isstarting..!\n");

ret = call_usermodehelper(path, argv, envp,UMH_WAIT_PROC);

printk("ret=%d\n", ret);

return 0;

}

static void __exit test_exit(void){

}

 

module_init(test_init);

module_exit(test_exit);

 

MODULE_LICENSE("

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值