Linux应用程序地址布局
来源:互联网 发布:画框图软件 编辑:程序博客网 时间:2024/06/05 22:31
关于const常量在内存中的位置新认识
main函数外定义 const int a =1;//这里存在代码段,如果用指针去修改会出现段错误,访问非法内存,因为代码段不允许写
在函数内定义 const int b = 1;//这里存在栈中,所以相当于只读变量,可以利用指针修改
内存布局
代码示例
test.c
#include <stdio.h>#include <malloc.h> int global_init_a = 1;//全局、初始化、变量 :数据段 int global_uninit_a;//全局 、未初始化、变量 :数据段static int static_global_init_a = 1;//全局 静态、初始化 :数据段static int static_global_uninit_a;//全局、静态、未初始化 :数据段const int const_global_a = 1;//全局 常量 代码段void main(){ int local_init_a = 1;//局部、初始化:栈 int local_uninit_a;//局部 未初始化 :栈 static int static_local_init_a = 1;//数据段 static int static_local_uninit_a;//数据段 const int const_local_a = 1;//栈 malloc_p_a = malloc(sizeof(int));//堆 /* *打印各个数据的地址 */ while(1); }
- 编译程序 gcc -g -test.c -o text
- 执行程序,停在死循环处
- 打开另外一个终端,自行 ps aux 查看进程的pid 例如这个程序为 4902
- 执行 cat /proc/4902/maps 来查看这个程序的内存分布输出
x:可执行程序
w:可写
stack:堆
0x08048000–0x08049000 为代码段
0x08049000–0x0804a000 为数据段 - 然后对照程序输出地址可以对应都储存在哪个段
如何看.BSS段:使用 readelf -S 程序名
0x000008表示宽度为8
0 0
- Linux应用程序地址布局
- Linux应用程序地址布局
- linux应用程序地址布局
- Linux应用程序地址布局
- Linux应用程序地址布局
- Linux应用程序地址布局
- Linux应用程序地址布局
- [3]Linux应用程序地址布局
- [3]Linux应用程序地址布局
- 2、Linux应用程序地址布局
- linux应用程序(3)---应用程序地址布局
- Linux学习之Linux应用程序地址布局
- Linux应用程序在内存地址布局
- 一步一步学好Linux开发之Linux应用程序地址布局
- linux应用程序内存布局
- linux应用程序地址分布
- Linux应用程序地址分布
- linux应用编程笔记(3)addr.c分析linux应用程序地址布局
- [NOIP 2010] 引水入城
- Android线程一、AsyncTask使用简介
- UVA1428 Ping pong(树状数组)
- hrbust 1216/哈理工oj 1216 数的划分【dp】
- 笔记:Deep multi patch aggregation network for image style, aesthetics and quality estimation
- Linux应用程序地址布局
- Spark MLlib 1.6 -- 分类和回归篇
- 算法竞赛入门经典 孪生素数
- ThinkPHP框架总结之安全及使用
- 四维超体运动在三维空间的表现1(使用three.js)
- 第一博客,行走在编程道路上的菜鸟
- HDU 4614 Vases and Flowers(线段树+2分)
- [BZOJ 2180]最小直径生成树
- 排序算法(五)——简单选择排序