[英]What if the counter exceeds the memory allocated by malloc or calloc
[英]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
不太可能是页面对齐的,因此您最终会在相邻的 memory 上设置权限,也可能会破坏事情。free
之前不恢复旧权限,您可能会破坏malloc
的内部结构。 malloc()
通常会返回具有读写权限的 memory。 某些架构(例如:较旧的 x86)可能不允许以直接方式禁用执行权限,但这只是平台的缺陷。
如果你想从你分配的 memory 执行代码,你必须明确地给予执行权限,并且可能你必须删除写权限,因为在同一个 memory 上同时拥有写和执行权限在某些系统上被认为是潜在危险的(通常称为 W^X)。
还有几个其他线程用于执行程序员分配的 memory 中的代码:
在分配 memory 之后,您可能需要调用mprotect
自己设置PROT_EXEC
标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.