gpt4 book ai didi

c - FreeBSD kldload : can't load, 没有这样的文件或目录

转载 作者:行者123 更新时间:2023-11-30 15:27:20 27 4
gpt4 key购买 nike

我是内核和 KLD 编程新手。我正在寻找修改 FreeBSD 中系统调用模块的示例文件。我的问题是,是否可以在系统调用函数内 fork 或 exec ?就像下面的例子一样?

#include <sys/types.h>
#include <sys/param.h>
#include <sys/proc.h>
#include <sys/module.h>
#include <sys/sysent.h>
#include <sys/kernel.h>
#include <sys/systm.h>

/*
* The function for implementing the syscall.
*/
static int hello (struct thread *td, void *arg)
{
printf("Running...\n");
/******************************************************/
/*Something like this?*/
/******************************************************/
execl("/bin/pwd", "pwd", NULL);
return 0;
}

/*
* The `sysent' for the new syscall
*/

static struct sysent hello_sysent = {
0, /* sy_narg */
hello /* sy_call */
};

/*
* The offset in sysent where the syscall is allocated.
*/

static int offset = NO_SYSCALL;

/*
* The function called at load/unload.
*/

static int
load (struct module *module, int cmd, void *arg)
{
int error = 0;

switch (cmd) {
case MOD_LOAD :
uprintf ("syscall loaded at %d\n", offset);
break;
case MOD_UNLOAD :
uprintf ("syscall unloaded from %d\n", offset);
break;
default :
uprintf("There was some error!");
error = EINVAL;
break;
}
return error;
}

SYSCALL_MODULE(syscall, &offset, &hello_sysent, load, NULL);

没有编译错误(系统调用),但是在使用 kldload 加载它时,它返回一个错误:kldload:无法加载./syscall.ko:没有这样的文件或目录

有什么东西我可以阅读并了解更多关于为什么会发生这种情况以及我可以采取什么措施吗?

最佳答案

当 kldload 返回“没有这样的文件或目录”或其他一些奇怪的错误时,首先执行“dmesg”并在底部查找任何错误。在这种情况下,可能是由于缺少符号“execl”。这是因为 execl 是一个用户空间 API (man 3 execl),并且您尝试在内核中使用它。

您尝试做的事情似乎不是一个好主意,但这是可能的。查看 sys/kern/kern_exec.c:kern_execve()。

关于c - FreeBSD kldload : can't load, 没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27044502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com