程序中的数据在内存中的布局

原创 2007年09月14日 21:01:00

程序中的数据在内存中的布局

.bss和.data段是专用来存储全局变量的,在编译其间分配地址空间。
.data包含静态的己初始化的数据,而.bss包含未初妈化的数据。
.text段包含程序指令和和很多只读数据。

一个进程在内存中的数据组织如下图

+-------------------+  high address
|    env strings    |
+-------------------+
|    argv strings   |
+-------------------+
|    env pointers   |
+-------------------+
|    argv pointers  |
+-------------------+
|    argc           |
+-------------------+
|    stack          |
|      ^            |
|      |            |
|      |            |
|      v            |
|    heap           |
+-------------------+
|    .bss           |
+-------------------+
|    .data          |
+-------------------+
|    .text          |
+-------------------+  low address

1、stack

int func()
{
    int i = 0;
    ...
}

int main(int argc, char *argv[])
{
    int j;
}
i, j都存储于stack中。

2、heap

int main()
{
    char *data = malloc(10);
    ...
}

data指向一个地址,该地址在heap中

3、.bss

char global;
int main()
{
    ...
}

int main()
{
   static int bss_var;
}

global和bss_var存放于.bss中,它们是未初始化的全局变量和静态变量。

4、.data

char global = 'a';
int main(int argc, char *argv[])
{
    ...
}

int main(int argc, char *argv[])
{
    static char data_var = 'a';
}

global和data_var都存放在.data中。它们是已经初始化的全局变量和静态变量。

C程序的内存布局(Memory Layout)

C语言程序的内存布局 C语言程序的内存布局结构,包括连接过程中目标程序各个段的组成和运行过程中各个段加载的情况。 C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行...
  • gatieme
  • gatieme
  • 2015年02月06日 20:26
  • 17142

从汇编代码看程序内存分布

力求内容精简,以图会意 如下为代码:#include using namespace std;int fun(int a,int b) { int sum = a + b; retu...
  • smzx_boy2012
  • smzx_boy2012
  • 2016年10月14日 11:32
  • 845

java对象在内存中存储的布局

1)对象头 1,存储对象自身的运行时数据,如哈希码、GC分代年龄、键状态标识、线程持有的锁、偏向线程ID、偏向时间戳,对象头信息时与对象自身定义的数据无关的额外存储成本 2,类型指针,即对象指向它...
  • xuqiaobo
  • xuqiaobo
  • 2016年09月01日 19:07
  • 318

C程序在内存中的分区情况

由于内存的资源有限,不可能无限制地为变量分配内存,合理地组织程序中变量的内存分配是程序设计人员必须要考虑的问题,而要合理分配内存我们需要知道程序在内存中的分区情况,本文较为详细地介绍了C程序在内存中的...
  • qq_34972125
  • qq_34972125
  • 2016年05月12日 19:44
  • 212

字符数据在内存中的存储形式及其使用方法(C实现)

字符数据在内存中的存储形式及其使用方法(C实现) 1、将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。 例如字符...
  • qq_24373811
  • qq_24373811
  • 2016年10月25日 17:10
  • 1067

C++对象在内存中的布局(读汇编代码)

C++对象在内存中的布局 研究方法以及ARM调用规范 最近在对C++编写的SO库进行逆向,如果掌握了对象的布局,那么逆向也能轻松些,所以萌发了研究对象布局的想法。 本文采用的研究方法是:编写C+...
  • stillvxx
  • stillvxx
  • 2014年09月21日 11:51
  • 1179

在内存中运行可执行程序

 在内存中运行可执行程序         在内存中运行可执行程序,好处是可以给程序加壳,加密源程序,静态反汇编无法获得PE输入节,但是因为运行后仍然是独立的进程,所以没办法防止远程线程注入,挂接API...
  • xylary
  • xylary
  • 2007年01月08日 19:28
  • 3015

程序中各变量在内存中的位置

主要给初学者介绍下,我们编写的程序中,我们的代码,全局变量和静态变量在内存中是怎么存放的,我们new或者malloc出来的变量,在内存中是怎么分配的, 全局变量,静态变量----存于数...
  • gufeijunchi
  • gufeijunchi
  • 2014年12月05日 16:15
  • 2892

不同类型的变量在内存中存储的详细情况

一、int型变量在内存中存储详细情况 //By Richard #include #include int main() { int i1=0; int i2=1; in...
  • qingkong8832
  • qingkong8832
  • 2011年08月15日 11:08
  • 3122

程序在内存中的布局

程序在运行时,由操作系统将可执行文件载入到计算机的内存中,成为一个进程(process)。程序进程被创建时,系统就会为其分配内存空间。程序在内存中的布局由5个段(segment)组成,如下图所示: ...
  • qq_28249373
  • qq_28249373
  • 2017年08月06日 14:00
  • 110
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序中的数据在内存中的布局
举报原因:
原因补充:

(最多只允许输入30个字)