3

我正在尝试在 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 与内存页面大小对齐,也没有运气..

知道如何使它工作吗?

4

4 回答 4

1

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

于 2009-03-04T19:16:26.743 回答
0

您没有写入可执行区域的权限。无论如何,你为什么要这样做?

我确信这适用于某些平台,但不是全部。你想做什么?

于 2009-02-28T14:40:59.607 回答
0

这是另一个想法。尝试在没有 WRITE 的情况下将其标记为 EXEC。我认为拒绝 write+exec 可能是一项安全功能。

然后要写入它,将其标记为 WRITE 而不是 EXEC。

于 2009-05-08T00:24:39.353 回答
0

我对OSX一无所知。也就是说,您可以使用马赫函数vm_protect吗?

于 2009-02-27T08:47:05.333 回答