Доступ к общей памяти OSX не разрешен из приложений с графическим интерфейсом

У меня есть дистрибутив для OSX, который я внедряю через DYLD_INSERT_LIBRARIES, и он вызывает

shm_open("name", O_RDWR);

Общая память была настроена в другом процессе с использованием

shm_open("name", O_RDWR|O_CREAT, 0777);

Связь между введенным dyld и внешним приложением успешна при запуске в /bin/bash и других программах командной строки. Тестирование в приложениях с графическим интерфейсом, таких как Calculator или Preview, выдает ошибку, когда shm_open вызывается из введенного dylib. Ошибка "Операция не разрешена".

Кто-нибудь знает причину этого?

1 ответ

Решение

Оба упомянутых вами приложения - "Калькулятор" и "Предварительный просмотр" - находятся в "песочнице". Одна из вещей, которая мешает им делать это, - доступ к общей памяти (за исключением определенных конкретных обстоятельств, которые не применимы к этим приложениям). Подробнее см. В документации Apple " Руководство по разработке изолированной программной среды приложения: углубленная тестовая среда приложения".

Если вам нужно взаимодействовать с произвольными изолированными процессами, вам нужно будет использовать альтернативный метод для этого (возможно, XPC, хотя я не очень знаком с этим). Если вы просто хотите протестировать внедрение dylib в процессах с графическим интерфейсом, попробуйте приложение без песочницы, например Stickies (начиная с Mac OS 10.9).

Другие вопросы по тегам