OS X Tiger上的mprotect API

时间:2009-02-27 07:52:24

标签: c macos unix mprotect osx-tiger

我正在尝试在MacOSX 10.4(老虎)上使用mprotect API,我尝试了所有可能的方式,我知道,它总是返回-1,错误13,这意味着“权限被拒绝”,而我正在尝试添加写一些可执行代码的权限。

相同的代码完全适用于MacOS X 10.5(leopard)。

代码非常简单

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

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

知道如何使其正常工作吗?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我对OSX一无所知。那就是说,你能使用Mach函数vm_protect吗?

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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