Pointers 获取当前进程的起始地址';那是堆?

Pointers 获取当前进程的起始地址';那是堆?,pointers,stack,malloc,heap,low-level,Pointers,Stack,Malloc,Heap,Low Level,我正在探索系统的底层工作,并且想知道malloc如何确定堆的起始地址。堆是否处于恒定偏移量,或者是否存在某种调用以获取起始地址?堆栈是否会影响堆的开始地址?传统上,堆从文本部分上方开始,然后逐渐长大;堆栈帧向下生长到未映射的0页时,根本不会影响起始地址。然而,如今,这种情况更为普遍 第一个要随机化的地址,使漏洞攻击更难命中内存中的正确地址 堆是非连续的,因为malloc()通常只调用mmap()来获取虚拟地址空间中的任何位置的地址 sbrk返回它添加(或删除)的字节的起始地址。在尚未分配堆的新进

我正在探索系统的底层工作,并且想知道
malloc
如何确定堆的起始地址。堆是否处于恒定偏移量,或者是否存在某种调用以获取起始地址?堆栈是否会影响堆的开始地址?

传统上,堆从文本部分上方开始,然后逐渐长大;堆栈帧向下生长到未映射的0页时,根本不会影响起始地址。然而,如今,这种情况更为普遍

  • 第一个要随机化的地址,使漏洞攻击更难命中内存中的正确地址
  • 堆是非连续的,因为
    malloc()
    通常只调用
    mmap()
    来获取虚拟地址空间中的任何位置的地址

  • sbrk返回它添加(或删除)的字节的起始地址。在尚未分配堆的新进程中,对sbrk的第一次调用应该返回堆的“break”部分的起始地址。如果我不得不打赌的话,使用brk/sbrk的malloc实现在第一次运行时可能就是这么做的。

    啊,我现在明白了。谢谢