码迷,mamicode.com
首页 > 系统相关 > 详细

Linux x86_64进程内存空间布局

时间:2015-03-09 00:34:17      阅读:568      评论:0      收藏:0      [点我收藏+]

标签:linux内核

关于Linux 32位内存下的内存空间布局,可以参考这篇博文Linux下C程序进程地址空间局关于源代码中各种数据类型/代码在elf格式文件以及进程空间中所处的段,在x86_64下和i386下是类似的,本文主要关注vm.legacy_va_layout以及kernel.randomize_va_space参数影响下的进程空间内存宏观布局。

情形一:

  • vm_legacy_va_layout=1
  • kernel.randomize_va_space=0
    此种情况下采用传统内存布局方式,不开启随机化
    cat 程序的内存布局
    技术分享
    可以看出:
    代码段:0x400000–>
    数据段
    堆:向上增长 2aaaaaaab000–>
    栈:7ffffffde000<–7ffffffff000
    系统调用:ffffffffff600000-ffffffffff601000
    你可以试一下其他程序,在kernel.randomize_va_space=0时堆起点是不变的

情形二:

  • vm_legacy_va_layout=0
  • kernel.randomize_va_space=0
    现在默认内存布局,不随机化
    技术分享
    可以看出:
    代码段:0x400000–>
    数据段
    堆:向下增长 <–7ffff7fff000
    栈:7ffffffde000<–7ffffffff000
    系统调用:ffffffffff600000-ffffffffff601000

情形三:

  • vm_legacy_va_layout=0
  • kernel.randomize_va_space=2 //ubuntu 14.04默认值
    使用现在默认布局,随机化
    技术分享
    技术分享
    对比两次启动的cat程序,其内存布局堆的起点是变化的,这从一定程度上防止了缓冲区溢出攻击。

情形四:

  • vm_legacy_va_layout=1
  • kernel.randomize_va_space=2 //ubuntu 14.04默认值
    与情形三类似,不再赘述

Linux x86_64进程内存空间布局

标签:linux内核

原文地址:http://blog.csdn.net/feilengcui008/article/details/44141495

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!