我通过DYLD_INSERT_LIBRARIES注入(inject)OSX上的dylib,它调用
shm_open("name", O_RDWR);
共享内存是在另一个进程中使用
shm_open("name", O_RDWR|O_CREAT, 0777);
在/ bin / bash和其他命令行程序中运行时,从注入(inject)的dyld与外部应用程序的通信成功。从注入(inject)的dylib调用shm_open时,在GUI应用程序(例如Calculator或Preview)中进行测试会产生错误。错误是“不允许操作”。
有谁知道背后的原因吗?
最佳答案
您提到的两个应用程序-计算器和预览-都已沙箱化。阻止他们执行操作的一件事是访问共享内存(某些特定情况并不适用于这些应用程序)。有关详细信息,请参见Apple文档“App Sandbox Design Guide: App Sandbox in Depth”。
如果需要与任意沙盒进程进行通信,则需要使用其他方法进行通信(可能是XPC,尽管我对此不太熟悉)。如果只想在GUI进程中测试dylib注入(inject),请尝试使用非沙盒式应用程序,例如Stickies(从Mac OS 10.9开始)。
关于c++ - GUI Apps不允许OSX共享内存访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23963905/