【发布时间】:2019-02-28 13:58:36
【问题描述】:
我最近看了这篇文章http://codearcana.com/posts/2012/05/06/securing-and-exploiting-go-binaries.html 它在 Go 中声称堆是可执行的。这对我提出了一些关于运行时和操作系统之间交互的不同问题。
在 C 语言中,当程序需要堆上的空间时,它会调用 malloc,而后者又会调用 sbrk,从而为其提供内存。据我所知,堆是只读的。
为什么 Go 中的堆是可执行的?应用程序有什么不同 - Go 中的 OS 交互与 C 中的交互?
谢谢
【问题讨论】:
-
C 标准n1570 中没有任何内容表明它的堆是不可执行的。这是实现的质量问题(C 堆可以在某些系统上执行)。顺便说一句,在我的系统上,
malloc可能 - 并且经常这样做,对于大内存区域 - 使用mmap(不仅是sbrk)
标签: go memory-management operating-system heap-memory exploit