我正在尝试在 MacOSX 10.4 (tiger) 上使用 mprotect API,我尝试了所有可能的方法,它总是返回 -1,错误码为 13,这意味着在我尝试添加写入权限时“权限被拒绝”一些可执行代码。
相同的代码完全适用于 MacOS X 10.5(豹)。
代码很简单
int ret = mprotect((void*)pFunc, 4096, PROT_WRITE | PROT_EXEC);
其中 pFunc 是进程地址空间中加载的任何函数的地址。我尝试在添加 PROT_WRITE 访问权限之前删除 PROT_EXEC,但没有运气。我还尝试将 pFunc 与内存页面大小对齐,也没有运气..
知道如何使它工作吗?