来自task_for_pid()的EXC_BAD_ACCESS

时间:2016-01-06 05:21:20

标签: c++ c macos

我试图将task_for_pid()用于阅读另一个(非系统)流程的最终目标'内存通过vm_read()。但是,每当我以root身份运行代码时,只要执行EXC_BAD_ACCESS,我就会收到task_for_pid()错误标志。 OSX是否有更新的替代方案,我可以忽略?

1 个答案:

答案 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启动进入恢复模式,但不建议用于生产代码,因为它会禁用多个安全系统,例如防止运行未签名的内核扩展和修改系统文件。