gpt4 book ai didi

process - 处理来自 KEXT 的进程信息

转载 作者:行者123 更新时间:2023-12-04 04:48:23 31 4
gpt4 key购买 nike

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

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

我假设 sysctl() 可以在用户模式下使用,但有什么办法可以使用 proc_t 吗?
我尝试使用 XNU/osfmk/bsd 包含目录,但由于重新定义和其他错误,它无法编译。

这有点令人不安,我仍在努力思考我能做什么和不能做什么。
这当然可以做到,但我不太知道如何做到。

最佳答案

好的,我将尝试尝试一下我认为你在问的问题。

正如您所发现的,proc_t是指向不透明的指针 struct proc .但是不要把它写下来,因为有各种函数可以对这些指针进行操作,所以您不需要直接访问结构体(这有助于保持二进制兼容性)。其中大部分在 sys/proc.h 中声明在 Kernel.framework - 即 /System/Library/Frameworks/Kernel.framework/Versions/A/Headers/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 的 proc_t 等。

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

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

关于process - 处理来自 KEXT 的进程信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17825086/

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