【问题标题】:OSX Shared memory access not permitted from GUI Apps不允许从 GUI 应用程序访问 OSX 共享内存
【发布时间】:2014-05-30 21:52:28
【问题描述】:

我在 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 应用程序中进行测试会产生错误。错误是“不允许操作”。

有人知道这背后的原因吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2011-04-27
      • 2019-03-04
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多