Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Process 从KEXT处理进程信息_Process_Osx Mountain Lion_Kernel Extension_Sysctl - Fatal编程技术网

Process 从KEXT处理进程信息

Process 从KEXT处理进程信息,process,osx-mountain-lion,kernel-extension,sysctl,Process,Osx Mountain Lion,Kernel Extension,Sysctl,在KEXT中,我需要进行一些处理,以获得一个proc\t或一个pid。 如果我使用pid路径,我会执行sysctl()之类的操作 不幸的是,我也做不到。proc_t未定义,sysctl()也未定义。可以调用sysctlbyname(),但未定义kinfo_proc。如果我尝试使用proc\u t,编译器会抱怨[struct proc]的正向定义 我假设sysctl()可以在用户模式下使用,但是有什么方法可以使用proc\t吗? 我尝试使用XNU/osfmk/bsd include dir,但由于

在KEXT中,我需要进行一些处理,以获得一个proc\t或一个pid。 如果我使用pid路径,我会执行sysctl()之类的操作

不幸的是,我也做不到。proc_t未定义,sysctl()也未定义。可以调用sysctlbyname(),但未定义kinfo_proc。如果我尝试使用proc\u t,编译器会抱怨[struct proc]的正向定义

我假设sysctl()可以在用户模式下使用,但是有什么方法可以使用proc\t吗? 我尝试使用XNU/osfmk/bsd include dir,但由于重新定义和其他错误,它无法编译

这有点让人不安,我仍在努力思考我能做什么和不能做什么。
当然,这是可以做到的,但我只是不太知道怎么做。

好的,我想试着尝试一下我认为你在问的问题

正如您所发现的,
proc\u t
是指向不透明的
struct proc
的指针。不过,不要把它一笔勾销,因为有各种函数在这样的指针上运行,所以您不需要直接访问结构(这有助于保持二进制兼容性)。其中大部分在
内核.framework
sys/proc.h
中声明,即。您提到了PID和父PID,其中包括:

/* returns the pid of the given process */
extern int proc_pid(proc_t);
/* returns the pid of the parent of a given process */
extern int proc_ppid(proc_t);
还有一些函数可以实现另一种方式——获取PID的进程等

请注意,这些函数是内核BSD部分的一部分,因此kext需要在其info.plist中声明对BSD KPI捆绑包的依赖关系。(如果尚未遇到此问题,请查阅kextlibs工具)


来自Windows,您可能必须习惯于阅读头文件和源代码,而不是文档。OSX内核API的大部分内容都没有文档记录。

您实际上想做什么?具体来说,您要调用什么sysctl?许多sysctl具有直接的内核API等价物
proc\u t
typedef
'd作为
struct proc*
——该结构确实是不透明的,但有相当多的API允许您间接访问proc struct的各个部分。(
#include
)基本上,不清楚你在问什么,以及你实际上想要实现什么。在尝试回答任何子问题之前,我想确保这不是XY问题。当程序启动时,我想将一些信息转发回用户模式。信息可以像PID一样简单,但我很可能需要更多信息,如父PID、路径和其他一些信息。由于我无法从proc\t获取信息,我想我可以使用sysctl(),但这显然是错误的。我可以将程序发送到我的kext,但它不知道(嗯,我不知道)如何正确提取信息。你可能不太清楚,因为我几周前就开始在OSX上编程了,我的经验是使用Windows内核:)谢谢!我阅读了proc.h,并使用了其中的一些函数。也谢谢你的提示。我已经收集了尽可能多的文档,但是筛选头文件是一个非常好的方法。我还有很多东西要学,但到目前为止还是很有趣的。我也必须以稍微不同的方式看待事情。