缓冲区溢出
时间:2010-04-01 来源:sjtlqy
编译后的程序被分成五个段,存放在下列五个内存段中。
code -> data -> Bss-> heap->stack 分别基地址到高地址。
A code 代码段 存储机器指令,不存储变量,指令均为只读属性,大小固定。
B data 存放全局变量和静态变量,均已经初始化,大小控件已经分配,大小固定。
C Bss 类似于data段,唯一区别就是未初始化,大小固定。
D heap 大小可以变化 存储其他变量,地址只往高地址方向延伸。
E stack 存储中间结果,例如函数调用中的一些变量,返回地址,参数等。大小可以变化。先进后出,地址变化只往低地址处延伸。
Heap :由应用程序来分配内存,可以初始化。一个进程可以有多个heap,具有一个默认的heap;由分配器和回收器来进行内存管理。在C中用malloc和free,c++ 中new和delete来分配和取消内存空间。
Stack : 由编译器自动分配,参数和返回地址存入其中,当需要时会被弹出,弹至程序下一条指令。
code -> data -> Bss-> heap->stack 分别基地址到高地址。
A code 代码段 存储机器指令,不存储变量,指令均为只读属性,大小固定。
B data 存放全局变量和静态变量,均已经初始化,大小控件已经分配,大小固定。
C Bss 类似于data段,唯一区别就是未初始化,大小固定。
D heap 大小可以变化 存储其他变量,地址只往高地址方向延伸。
E stack 存储中间结果,例如函数调用中的一些变量,返回地址,参数等。大小可以变化。先进后出,地址变化只往低地址处延伸。
Heap :由应用程序来分配内存,可以初始化。一个进程可以有多个heap,具有一个默认的heap;由分配器和回收器来进行内存管理。在C中用malloc和free,c++ 中new和delete来分配和取消内存空间。
Stack : 由编译器自动分配,参数和返回地址存入其中,当需要时会被弹出,弹至程序下一条指令。
相关阅读 更多 +