linux进程空间
来源:互联网 发布:土豪金麻将源码 编辑:程序博客网 时间:2024/05/18 01:51
在32位机器的linux系统同进程的地址空间大小是4G.
0~3G( 0x0000 0000 ~ 0xBFFF FFFF) 属于用户空间
3~4G( 0xC000 0000 ~ 0xFFFF FFFF) 属于内核空间
进程地址空间由以下几部分组成
高地址 内核空间 | 0xc000 0000
| 命令行参数和环境变量
| (ramdom stack offset)
| 栈 (RLIMIT_STACK ... 8M)
| (ramdom mmap offset)
| 内存映射空间( file mmapings and anonymous mappings, grow down)
| 堆(start brk, grow up)
| (random brk offset)
| 未初始化的数据(bss)
| 已初始化的数据(data)
低地址 代码区(text) | 0x0804 8000
新版本中为了防止缓冲区溢出攻击给堆和栈都加了一个随机偏移, 是程序每次的堆栈信息都不一样.
1) 代码区是可共享的, 即有可能多个进程只使用了一个代码区. 为了防止程序异常而修改代码区的代码, 代码区通常设置为只读的.
2) data区存放一些已经初始化的全局变量
3) 程序的入口地址在编译阶段已经确定了, 通过 readelf -h a.out 命令输出的"Entry point address"字段就可以知道程序的入口地址是多少了.
编译时可以通过 "-Ttext [addr]" 命令选项 或者 "-T [ lds file ]" 中的lds文件来指定函数的入口地址.
其他地址选项可以通过ld的帮助文档(快速查看: ld --help | grep "\-T" ).
下面给出一个lds的片段(也可以通过ld -verbose 查看默认的lds文件).
============ start of lds =====================
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
start.o (.text)
*(.text)
}
.............
.............
}
============== end of lds =========================
- Linux - 进程(一) 进程空间
- linux进程空间
- Linux进程地址空间
- Linux进程地址空间
- LINUX进程地址空间
- linux 进程地址空间
- linux进程空间
- Linux进程地址空间
- Linux进程地址空间
- Linux进程空间分配
- Linux进程地址空间
- linux 进程地址空间
- LINUX进程地址空间
- linux进程地址空间
- linux进程地址空间
- Linux进程地址空间
- Linux进程空间分配
- linux进程空间解析
- html中网址的访问前、访问后的颜色变化
- power designer中如何给导出的xml文档添加注释功能
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式
- 暴怒:我的婚姻乱象
- VS2010 winform使用控件皮肤出错的解决方案
- linux进程空间
- 跨平台的.NET运行环境 Mono
- 图片原图复制自己 解决图片上传不完整,图片打不开
- C++教学总结
- 缓冲区溢出保护
- Python set的高效利用
- C++程序员进阶
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- Unity3D游戏开发入门 —— 界面与简单编程