繁体   English   中英

malloc分配的memory的保护标志是什么?

[英]What's the protection flags of memory allocated by malloc?

根据this thread ,malloc分配的malloc至少有PROT_READ | PROT_EXEC PROT_READ | PROT_EXEC ,否则无法执行包含的 function。

man malloc没有提到任何关于保护的内容,因此这个问题。

malloc不是为代码分配 memory 的正确工具。 您应该使用mmap ,并且根据系统上的偏执安全策略,您可能还需要使用mprotect来更改权限。

malloc不是正确工具的原因包括:

  • 权限仅设置页面粒度,但 malloc 获得的malloc不太可能是页面对齐的,因此您最终会在相邻的 memory 上设置权限,也可能会破坏事情。
  • 如果您在调用free之前不恢复旧权限,您可能会破坏malloc的内部结构。

malloc()通常会返回具有读写权限的 memory。 某些架构(例如:较旧的 x86)可能不允许以直接方式禁用执行权限,但这只是平台的缺陷。

如果你想从你分配的 memory 执行代码,你必须明确地给予执行权限,并且可能你必须删除写权限,因为在同一个 memory 上同时拥有写和执行权限在某些系统上被认为是潜在危险的(通常称为 W^X)。

还有几个其他线程用于执行程序员分配的 memory 中的代码:

在 linux 上的 c 中分配可执行 ram
是否可以从标准 C 中的堆栈执行代码?

在分配 memory 之后,您可能需要调用mprotect自己设置PROT_EXEC标志。

$ 人 mprotect

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM