У меня есть дистрибутив для 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. Ошибка «Операция не разрешена».
Кто-нибудь знает причину этого?
Оба приложения, которые вы упомянули — Калькулятор и Предварительный просмотр — находятся в «песочнице». Одна из вещей, которая мешает им делать это, — доступ к общей памяти (за исключением определенных конкретных обстоятельств, которые не относятся к этим приложениям). Смотрите документацию Apple «Руководство по разработке изолированной программной среды приложения: углубленная тестовая среда приложения«для деталей.
Если вам нужно взаимодействовать с произвольными изолированными процессами, вам нужно будет использовать альтернативный метод для этого (возможно, XPC, хотя я не очень знаком с этим). Если вы просто хотите протестировать внедрение dylib в процессах с графическим интерфейсом, попробуйте приложение без песочницы, такое как Stickies (начиная с Mac OS 10.9).