【问题标题】:Why is the heap in Go executable?为什么 Go 中的堆是可执行的?
【发布时间】: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


【解决方案1】:

为什么 Go 中的堆是可执行的?

Go heap 自 2013 年起不可执行。

【讨论】:

    【解决方案2】:

    heap is no longer executable

    在运行时为 Go 1.1 之前的函数文字生成代码,因此需要一个可执行堆。函数调用为revamped in Go 1.1,以消除对可执行堆的需求并提供其他好处。

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多