只是想知道是否有可能获得kext中给定proc_t的任务。 我尝试过task_for_pid()因为某些我不记得的原因而无效。 我试过sys / proc.h中的proc_task(proc_t p),但我无法加载我的kext,因为没有导出该函数。
我想我做错了什么,但我无法弄清楚是什么。假设我可以完成一个进程的任务,我想使用一些马赫调用并分配内存,写内存等等但是为此,我需要我相信的任务。
答案 0 :(得分:3)
不幸的是,我不知道公开直接proc_t
- > task_t
查询KPI。
但是,在某些情况下,只要您需要,您就可以使用current_task()
并坚持使用该指针。使用task_reference
和task_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中声明的,我想是保留给用户模式)。