Je *_*Rog 6 c memory-management protection
根据这个线程,malloc
至少分配的内存有PROT_READ | PROT_EXEC
,否则无法执行包含的功能.
man malloc
因此没有提及任何关于保护的问题.
malloc()
通常会返回具有读写权限的内存。某些体系结构(例如:较旧的 x86)可能不允许以直接的方式禁用执行权限,但这只是平台的缺陷。
如果您想从分配的内存中执行代码,则必须显式授予执行权限,并且可能必须删除写入权限,因为在某些系统上,对同一内存同时拥有写入和执行权限被认为具有潜在危险(通常称为W^X)。
还有其他几个线程从程序员分配的内存中执行代码:
在Linux上的C中分配可执行RAM
是否可以从标准C的堆栈中执行代码?
malloc
不是为代码分配内存的正确工具.您应该使用mmap
,并且根据系统上的偏执安全策略,您可能还需要使用它mprotect
来更改权限.
其中的原因malloc
不是正确的工具:
malloc
不太可能是页面对齐的,因此您最终也会设置相邻内存的权限,可能会破坏内容.free
,则可能会破坏malloc
内部.