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