0
我想知道Linux內核如何映射x86_64上的0x7fffffffffff下的用戶空間部分(如堆棧,堆和全局變量)。x86_64 Linux進程的用戶空間虛擬內存佈局是什麼?
內核是否更喜歡每個節的固定起始地址?還是在某種程度上取決於鏈接器的決定?每個部分的大小是多少?
我想知道Linux內核如何映射x86_64上的0x7fffffffffff下的用戶空間部分(如堆棧,堆和全局變量)。x86_64 Linux進程的用戶空間虛擬內存佈局是什麼?
內核是否更喜歡每個節的固定起始地址?還是在某種程度上取決於鏈接器的決定?每個部分的大小是多少?
Linux(和大多數其他現代操作系統)正在做一些叫做Address space layout randomization的事情。這允許操作系統將堆棧,堆和庫移動到任意位置以防止某些類別的攻擊。
需要鏈接器支持的唯一部分是文本部分 - 您需要生成enter link description here以隨機化本節的開始。
關於部分的大小,文本部分顯然取決於二進制大小以及特定程序的初始化和未初始化數據部分。最大堆棧大小由內核控制,堆大小由程序中斷決定(有關圖形說明,請參見enter link description here),並可通過調用brk (2)
來更改堆大小。
謝謝。 ASLR被禁用後,我發現堆/棧被分配在固定地址。 – xywang