我试图将task_for_pid()
用于阅读另一个(非系统)流程的最终目标'内存通过vm_read()
。但是,每当我以root身份运行代码时,只要执行EXC_BAD_ACCESS
,我就会收到task_for_pid()
错误标志。 OSX是否有更新的替代方案,我可以忽略?
答案 0 :(得分:1)
在El Capitan之前(10.11),为了调用task_for_pid
,调用进程必须是root或procmod组的成员,否则函数将失败。
自从El Capitan引入系统完整性保护(SIP - 又称无根)以来,对于标记为SIP一部分的进程不再可能调用task_for_pid,这些进程主要是操作系统的一部分或Apple提供的进程。
为了在El Capitan下调用task_for_pid,调用进程必须在其证书中以特殊权利签署,该证书目前仅适用于Apple,而不适用于开发人员。
您可以turn off SIP启动进入恢复模式,但不建议用于生产代码,因为它会禁用多个安全系统,例如防止运行未签名的内核扩展和修改系统文件。