【问题标题】:Compilation error "Incomplete definition of type 'struct proc'"编译错误“'struct proc'类型的定义不完整”
【发布时间】: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


【解决方案1】:

该结构是不透明的,不支持直接取消引用指向它的指针,因为它的布局可能会从操作系统版本更改为操作系统版本。

请改用proc_name() 等访问器函数。请注意,p_textvp 始终为 NULL,因此没有访问器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2011-11-28
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多