3

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

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

4

2 回答 2

3

不幸的是,我不知道公共直接proc_t->task_t查找 KPI。

但是,在某些情况下,只要您需要,您就可以不使用current_task()并持有该指针。使用task_referenceandtask_deallocate进行引用计数(但显然不要永远持有引用,否则它们将永远不会被释放)。您还可以随时通过全局变量访问内核的任务(对应于进程 0)kernel_task

于 2013-08-28T10:14:46.043 回答
2

经过一番研究,似乎并非如此。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 中声明的,我想它们是为用户模式保留的) .

于 2013-08-28T06:09:28.793 回答