По сути, это то, что я пытаюсь сделать,
#include <sys/mman.h>
int zero() {
return 0;
}
int main(int argc, const char *argv[]) {
return mprotect((void *) &zero, 4096, PROT_READ | PROT_WRITE);
}
поэтому я, по сути, пытаюсь сделать код доступным для записи. Это не работает в текущей macOS (Catalina 10.15.2), она просто возвращает -1
и устанавливает errno
в EACCES
, что, насколько мне известно, связано с отсутствием прав / подписи кода. Я нашел право, которое мне нужно установить, но я понятия не имею, как это сделать и как на самом деле его подписать.
Если я запустил codesign -d --entitlements :- <path_to_app>
, он не сработает с code object is not signed at all
, хотя я некоторое время пытался настроить подпись в Xcode (у меня есть сертификат и т. Д.). Итак, как мне это сделать? На самом деле подписание в Xcode неочевидно, так что я довольно невежественен.
PROT_WRITE
в MacOS Catalina. Мы не могли исправить это, передав все флаги в правах. - person tobe   schedule 15.05.2020com.apple.security.cs.allow-jit
,com.apple.security.cs.allow-unsigned-executable-memory
иcom.apple.security.cs.disable-executable-page-protection
, но это не сработало. Это может быть проблема MacOS Catalina, и разработчики из Apple могли ее исправить. - person tobe   schedule 18.05.2020