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段存放的是未初始化的数据(变量),只要是存放在数据段(大概念)又没有初始化的就存在这里。

  • 相关阅读:
    Linux在线或者离线安装gitlab
    Linux如何安装rpm文件
    使用docker run启动并进入一个容器
    docker导入导出镜像
    Mycat学习笔记一
    Mysql源码安装过程中可能碰到的问题
    当idea的maven项目没有.iml文件导致打开失败时
    从Vue.js窥探前端行业
    CSS 的overflow:hidden 属性详细解释
    win7系统Myeclipse下切换SVN用户
  • 原文地址:https://www.cnblogs.com/YanfeiHao/p/4432991.html
Copyright © 2011-2022 走看看