gpt4 book ai didi

c - 如何解决此编译器错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:58 24 4
gpt4 key购买 nike

在尝试一些 FreeBSD 内核黑客攻击时,我在一个简单的钩子(Hook)示例中遇到了错误。代码如下

*注意 - 我已经添加了 #include <sys/stat.h>正如许多人所建议的那样,但继续出现相同的错误。

#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>
#include <sys/syscall.h>
#include <sys/sysproto.h>
#include <sys/stat.h>

static int mkdir_hook(struct thread *td, void *syscall_args) {

struct mkdir_args *uap;
uap = (struct mkdir_args *)syscall_args;
char path[255];
size_t done;
int error;
error = copyinstr(uap->path, path, 255, &done);
if(error != 0)
return (error);

uprintf("hooked it\n");
return (mkdir(td, syscall_args));
}

static int load(struct module *module, int cmd, void *arg) {
int error = 0;
switch(cmd){
case MOD_LOAD:
sysent[SYS_mkdir].sy_call = (sy_call_t *)mkdir_hook;
break;
case MOD_UNLOAD:
sysent[SYS_mkdir].sy_call = (sy_call_t *)mkdir;
break;
default:
error = EOPNOTSUPP;
break;
}
return(error);
}

static moduledata_t mkdir_hook_mod = {
"mkdir_hook",
load,
NULL
};

DECLARE_MODULE(mkdir_hook, mkdir_hook_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);

编译错误是

    mkdirhook.c:23:11: error: implicit declaration of function 'mkdir' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
return (mkdir(td, syscall_args));
^
1 error generated.
*** Error code 1

我猜这是一个简单的问题,我使用的代码示例已经过时了。

最佳答案

您不能在内核模块中使用 mkdir

mkdir 函数是标准 C 库 (libc) 的一部分,只能在用户空间程序中使用,不能在内核或模块代码!

所以 sys/stat.hmkdir 的定义是在 #ifndef _KERNEL/#endif block 中,不会被如果您正在编译内核模块,则“看到”。

2011年,所有的系统调用都被赋予了sys_前缀。 (另请参阅 this question 的答案)因此您应该改用 sys_mkdir

关于c - 如何解决此编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23300858/

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