【问题标题】:mprotect API on OS X TigerOS X Tiger 上的 mprotect API
【发布时间】:2010-10-10 06:47:57
【问题描述】:

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

知道如何让它工作吗?

【问题讨论】:

  • +1 ,我遇到了同样的问题,最终只是从我的支持列表中删除了 OSX。
  • 显示产生问题的完整程序。

标签: c macos unix mprotect osx-tiger


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我确实有权写入 leopard 上的可执行区域(这更安全,..etc)。我正在尝试做一些类似于 microsoft detours 在 Windows 上所做的事情。
      【解决方案4】:

      我对 OSX 一无所知。话说,能不能用马赫函数vm_protect

      【讨论】:

      • vm_protect 正在返回 KERN_PROTECTION_FAILURE,因为新保护增加了超出现有最大保护的最大保护。我不知道如何更改“默认”最大保护?
      • 通过执行 vmmap 可以处理,我看到包含 pFunc 的虚拟内存页面具有 rx 最大权限,而我看到其他可执行的虚拟内存页面具有 rwx 权限,任何想法如何为我的可执行页面?感谢提前
      猜你喜欢
      • 2020-02-14
      • 2023-04-01
      • 2010-10-10
      • 2011-02-25
      • 2023-03-03
      • 2010-10-14
      • 2011-03-03
      • 2010-11-27
      • 2010-10-03
      相关资源
      最近更新 更多