Macos 我可以在KEXT中获得任务吗?

Macos 我可以在KEXT中获得任务吗?,macos,kernel-extension,Macos,Kernel Extension,只是想知道是否有可能在kext中获得给定进程的任务。 我尝试了任务\u for_pid(),但由于某些我不记得的原因,该任务不起作用。 我从sys/proc.h尝试了proc_task(proc_t p),但无法加载kext,因为该函数未导出 我猜我做错了什么,但我不太明白是什么。假设我可以得到一个进程的任务,我想使用一些mach调用并分配内存、写内存等等,但为此,我需要我相信的任务。经过一些研究后,情况似乎不是这样。 proc.h中定义了proc_task(),但它位于#ifdef KERNE

只是想知道是否有可能在kext中获得给定进程的任务。 我尝试了任务\u for_pid(),但由于某些我不记得的原因,该任务不起作用。 我从sys/proc.h尝试了proc_task(proc_t p),但无法加载kext,因为该函数未导出


我猜我做错了什么,但我不太明白是什么。假设我可以得到一个进程的任务,我想使用一些mach调用并分配内存、写内存等等,但为此,我需要我相信的任务。

经过一些研究后,情况似乎不是这样。 proc.h中定义了proc_task(),但它位于#ifdef KERNEL_PRIVATE下。KEXT将编译该警告

为了使用该功能,您必须在依赖项列表中添加com.apple.kpi.private,但即使这样也会失败,因为您很可能不是apple:)

只有Apple kexts可以链接到com.Apple.kpi.private


无论如何,这个实验很有趣,因为其他API,比如vm_read、vm_write等,在KEXT中是不可用的(这可能是有意义的,因为它们是在vm_user.h中声明的,我想它们是为用户模式保留的)。

我不知道有公共直接
过程
->
任务
查找KPI,不幸的是


但是,在某些情况下,您可能可以使用
current_task()
并在需要的时间内一直保持该指针。使用
task\u reference
task\u deallocate
进行引用计数(但显然不要永远保留引用,否则它们将永远不会被释放)。您还可以随时通过全局变量
kernel\u task

访问内核的任务(对应于进程0)。有趣的是,您可以从用户地的角度访问任务并执行各种操作,但不能从KEXT执行相同的操作。来自Windows世界,这有点违反直觉:)但我每天都在学习。是的,我得到的印象是,公共KPI和非公共KPI背后的系统相当少。我怀疑在某一点上,苹果决定了它想让第三方开发者创建什么样的kext,基本上只是编辑了一份苹果自己的kext所需的符号列表,并将其公开。从那时起,各种各样的零碎物品被添加进来。