进程内存组织

如果你是黑客,那么他必然是对内存的组织架构了然于心,因为攻击计算机的本质就是对计算机内存的攻击
本小节是对程序在内存中的存储结构进行讲解

一个程序在计算机上运行,那么至少有一个主进程,那么这个进程如果需要运行下去,那么必须要有存储空间,进程的内存一般分为code(代码段)、data(数据段)、heap(堆)、stack(栈)等。

  1. code和text段:存储乘车的指令和只读数据,可被标记为只读,当试图去修改内存就会引发错误
  2. data段:包含了初始化数据、未初始化数据、静态变量、全局变量
  3. heap:动态分配进程内存
  4. stack:LIFO(先进后出)数据结构,支持进程的执行

栈管理

栈(stack)通过维护自动的进程状态数据来支持程序的执行。

例如:

一个主程序中主例程(main函数)调用的A函数,A函数中调用B函数主例程首先将需要执行的指令压入栈中,当执行到调用A函数时,将A函数执行的指令压入栈中,当A函数中调用B函数时,再将B函数执行的指令入栈,B函数执行完成以后返回A函数的地址继续执行A函数的指令,A函数执行完毕后返回主例程地址继续执行主例程指令。这就利用栈的特性:先进后出除了返回地址之外,栈还被用来保存子例程的参数以及局部(或自动)变量,帧(frame)指有函数调用引发的的推入栈的数据。当前帧的地址被存储到帧或者寄存器中


本小节内容参考《C和C++安全编码》2.4小节中的进程内存组织。

发表评论

电子邮件地址不会被公开。 必填项已用*标注