【发布时间】:2020-06-24 13:07:41
【问题描述】:
这基本上就是我想要做的,
#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 签名并不明显,所以我相当无能。
【问题讨论】:
-
是MacOS Catalina中
PROT_WRITE的问题。我们无法通过传递权利中的所有标志来修复它。 -
我们已经测试了所有权利的协同设计,例如
com.apple.security.cs.allow-jit、com.apple.security.cs.allow-unsigned-executable-memory和com.apple.security.cs.disable-executable-page-protection,但它不起作用。这可能是 MacOS Catalina 的问题,Apple 的 hop 开发人员可以解决它。
标签: xcode macos text code-signing-entitlements mprotect