我在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应用程序中进行测试会产生错误。错误是“不允许操作”。
有谁知道这背后的原因?
答案 0 :(得分:1)
您提到的两个应用程序 - 计算器和预览 - 都是沙盒。这阻止他们做的事情之一是访问共享内存(在某些特定情况之外,这些情况不适用于这些应用程序)。请参阅Apple的文档" App Sandbox Design Guide: App Sandbox in Depth"详情。
如果您需要与任意沙盒进程通信,则需要使用备用方法(可能是XPC,尽管我不太熟悉它)。如果您只想在GUI进程中测试dylib注入,请尝试使用像Stickies这样的非沙盒应用程序(从Mac OS 10.9开始)。