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

时间:2010-04-28 04:38:30

标签: pointers stack malloc heap low-level

我正在探索系统的低级工作,并想知道malloc如何确定堆的起始地址。堆是否处于常量偏移量,或者是否有某种调用来获取起始地址?堆栈是否会影响堆的起始地址?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

传统上,堆开始于文本部分的上方并且长大了;堆栈帧根本不影响起始地址,因为它们向未映射的0页面向下增长。然而,这些日子更为常见

  1. 第一个被随机化的地址,让攻击者更难以在内存中找到正确的地址
  2. 堆是非连续的,因为malloc()通常只调用mmap()来获取虚拟地址空间中的任何地址