【发布时间】:2019-08-27 23:15:18
【问题描述】:
我们正在尝试使用 kauth 进程侦听器 (KAUTH_SCOPE_PROCESS) 监控进程。 kauth 进程侦听器的参数之一是指向 proc_t (struct proc) 的指针
我们要访问proc_t的一些成员,例如p_name(进程名)、p_textvp(进程可执行文件的vnode)等。我们写了一段代码但是在编译时,我们得到了编译错误“'struct proc'类型的不完整定义”
如果有人指导我解决此问题,将不胜感激。
static int ProcessScopeListener(
kauth_cred_t credential,
void* idata,
kauth_action_t action,
uintptr_t arg0,
uintptr_t arg1,
uintptr_t arg2,
uintptr_t arg3
)
{
proc_t process = (proc_t) arg0;
…
//Compilation error in the following two lines
char* proc_name = &process->p_name[0];
struct vnode* p_textvp = process-> p_textvp;
.
.
.
return KERN_SUCESS;
}
如果您需要更多信息,请告诉我。
【问题讨论】:
-
既然你试图通过一个
proc_t来访问,你说它的类型是struct proc *,那么大概你忘了包含定义struct proc的头文件,所以显然它可以' t 在不知道结构定义的情况下为process->p_name之类的东西生成代码。 -
@TomKarzes 是的,你是对的。我正在使用 Xcode 进行编码并使用内核框架。在 Kernel Framework 中公开的任何头文件中都没有 struct proc 定义 的痕迹,甚至 sys/proc.h 也没有。但是通过探索 darwin-xnu 源代码,我可以看到 proc_internal.h 中定义的 struct proc。那么,是否建议只将这些必需的头文件直接添加到我的项目中并使用它?如果我错了,请指出正确的方向。
标签: c xcode macos kernel-extension