我正在尝试在MacOSX 10.4(tiger)上使用mprotect API,我尝试了各种可能的方法,它总是返回-1,并带有errno 13,这意味着在尝试向其中添加写许可权时“权限被拒绝”一些可执行代码。

相同的代码可在MacOS X 10.5(豹)上正常工作。

代码很简单

int ret = mprotect((void*)pFunc, 4096, PROT_WRITE | PROT_EXEC);


其中pFunc是在进程地址空间中加载的任何函数的地址。我尝试在添加PROT_WRITE访问权限之前删除PROT_EXEC,但是没有运气。我也尝试将pFunc与内存页面大小对齐,也没有运气。

知道如何使它起作用吗?

最佳答案

您是否正在尝试从可执行文件修改mmap的内存? mprotect的手册页(在Linux上)似乎表明,这将阻止您修改(PROT_WRITE)内存位置。

关于c - OS X Tiger上的mprotect API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/593896/

10-11 06:53