zoukankan      html  css  js  c++  java
  • 第4课-Linux应用程序地址布局

    1.应用程序都是由代码段,数据段,BSS段以及堆空间,栈空间组成。
    2.布局方式:
    (1)代码段在最低地址处,一般都是从0x8048000开始,这是虚拟地址,每一个应用程序都是这样的
    (2)数据段紧贴着代码段
    (3)在往上是BSS段其实也是一种数据段
    (4)在往上是堆空间,堆空间是往上增长的
    (5)定不一般是栈空间,栈空间是向下生长

    2.查看各个段的地址
    (1)在应用程序里面,末尾处加上while循环,防止程序结束后我们都还来不及查看
    (2)编译成可执行程序并运行
    (3)用#ps aux命令查看你的应用程序的PID
    (4)打开另一个终端,用cat命令查看文件信息
    比如#cat  /proc/(PID of your Program)/maps
    (5)代码段是只读的,而且可执行
    (6)数据段是可写的
    (7)堆空间是heap。栈空间是stack
    3.数据存放
    (1)全局变量,不管是初始化的还是未初始化的,以及静态的是否初始化的都是在数据段
    (2)全局常量(只读变量)是存放在代码段
    (3)非静态局部变量,不管是初始化的还是未初始化的都是在栈
    (4)静态的局部变量,不管是初始化的还是非初始化的,都是在数据段
    (5)局部常量(只读变量)在栈
    (6)通过malloc分配出的局部变量在堆。
    (7)字符串常量,不管是局部还是全局都在代码段
    4.关于BSS段
    (1)使用readelf工具查看。
    (2)用file查看可执行程序的属性
    (3)Linux下编译出的可执行应用程序是elf格式的
    (4)readelf  -S (可执行程序名)
    (5)bss段存放的是未初始化的数据(变量),只要是存放在数据段(大概念)又没有初始化的就存在这里。

  • 相关阅读:
    NHibernate 转载
    net中Json对单引号和特殊字符串的处理
    C#过滤非法字符
    Linq Distinct 扩展
    (转)Windows启动过程分析预引导
    special content filetypes require specialized software to use
    存储器
    (转)MAPISendMail调用系统默认的邮件客户端发邮件
    FrameControllerModel
    (转)c++的四种类型转换
  • 原文地址:https://www.cnblogs.com/YanfeiHao/p/4432991.html
Copyright © 2011-2022 走看看