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

时间:2013-08-25 22:38:38

标签: macos kernel-extension

只是想知道是否有可能获得kext中给定proc_t的任务。 我尝试过task_for_pid()因为某些我不记得的原因而无效。 我试过sys / proc.h中的proc_task(proc_t p),但我无法加载我的kext,因为没有导出该函数。

我想我做错了什么,但我无法弄清楚是什么。假设我可以完成一个进程的任务,我想使用一些马赫调用并分配内存,写内存等等但是为此,我需要我相信的任务。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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中声明的,我想是保留给用户模式)。