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

Je *_*Rog 6 c memory-management protection

根据这个线程,malloc至少分配的内存有PROT_READ | PROT_EXEC,否则无法执行包含的功能.

man malloc 因此没有提及任何关于保护的问题.

nin*_*alj 6

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

如果您想从分配的内存中执行代码,则必须显式授予执行权限,并且可能必须删除写入权限,因为在某些系统上,对同一内存同时拥有写入和执行权限被认为具有潜在危险(通常称为W^X)。

还有其他几个线程从程序员分配的内存中执行代码:

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


R..*_*R.. 5

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

其中的原因malloc不是正确的工具:

  • 权限仅使用页面粒度设置,但获取的内存malloc不太可能是页面对齐的,因此您最终也会设置相邻内存的权限,可能会破坏内容.
  • 如果在调用之前没有恢复旧权限free,则可能会破坏malloc内部.


Pau*_*l R 2

分配内存后,您可能需要自己调用mprotect来设置标志。PROT_EXEC

$ 人 mprotect