处理来自KEXT的过程信息

时间:2013-07-24 04:13:05

标签: process osx-mountain-lion kernel-extension sysctl

在KEXT中,我需要做一些处理,我会得到一个proc_t或只是一个pid。 如果我去pid路线,我会做各种各样的sysctl()。

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

的前向定义

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

这有点令人不安,我仍然试图绕过我能做什么,不能做什么。 当然可以这样做,但我不太清楚如何。

1 个答案:

答案 0 :(得分:3)

好的,我打算尝试一下我认为你问的问题。

正如您所发现的,proc_t是指向不透明struct proc的指针。不要把它写下来,因为有各种函数可以对这些指针进行操作,所以你不需要直接访问结构(这有助于保持二进制兼容性)。其中大部分都是在sys/proc.h的{​​{1}}中声明的,即/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/proc.h。您提到PID和父PID,其中包含以下内容:

Kernel.framework

还有其他方法的功能 - 获取PID等的proc_t。

请注意,这些函数是内核的BSD部分的一部分,因此您的kext需要在其info.plist中声明对BSD KPI包的依赖性。 (查看kextlibs工具,如果你还没有遇到过这个)

来自Windows,您可能不得不习惯于阅读头文件和源代码而不是文档。许多OSX内核API都没有记录。