代码之家  ›  专栏  ›  技术社区  ›  beta

获取当前进程堆的起始地址?

  •  2
  • beta  · 技术社区  · 15 年前

    我正在探索系统的底层工作,我想知道 malloc 确定堆的起始地址。堆的偏移量是常量还是有某种类型的调用来获取起始地址?堆栈是否影响堆的起始地址?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Michael Mrozek    15 年前

    传统上,堆开始于文本部分的正上方并逐渐增长;堆栈帧在向未映射的0页增长时根本不影响起始地址。然而,现在更常见的是

    1. 第一个要随机分配的地址,使漏洞攻击更难在内存中找到正确的地址。
    2. 堆不连续,如 malloc() 通常只是打电话 mmap() 在虚拟地址空间的任何位置获取地址
        2
  •  2
  •   Jegschemesch    14 年前

    SBRK 返回它添加(或删除)的字节的起始地址。在尚未分配堆的新进程中,第一个调用 SBRK 然后应该返回堆的“break”部分的起始地址。如果我敢打赌,那就是 马洛克 使用的实现 BRK/SBRK 可能是第一次跑步。