OSX不允许从GUI应用程序进行共享内存访问

时间:2014-05-30 21:52:29

标签: c++ macos user-interface shared-memory dylib

我在OSX上有一个dylib我通过DYLD_INSERT_LIBRARIES注入并调用

shm_open("name", O_RDWR);

使用

在另一个进程中设置了共享内存
shm_open("name", O_RDWR|O_CREAT, 0777);

在/ bin / bash和其他命令行程序中运行时,从注入的dyld到外部应用程序的通信成功。当从注入的dylib调用shm_open时,在诸如Calculator或Preview之类的GUI应用程序中进行测试会产生错误。错误是“不允许操作”。

有谁知道这背后的原因?

1 个答案:

答案 0 :(得分:1)

您提到的两个应用程序 - 计算器和预览 - 都是沙盒。这阻止他们做的事情之一是访问共享内存(在某些特定情况之外,这些情况不适用于这些应用程序)。请参阅Apple的文档" App Sandbox Design Guide: App Sandbox in Depth"详情。

如果您需要与任意沙盒进程通信,则需要使用备用方法(可能是XPC,尽管我不太熟悉它)。如果您只想在GUI进程中测试dylib注入,请尝试使用像Stickies这样的非沙盒应用程序(从Mac OS 10.9开始)。