程序的代码是存放在代码区的,一般代码区为只读的,不可修改的,道理很简单就是程序的安全性。其他的常量什么的也有自己的内存区域,
栈的调用过程一般是内存地址向下分配的。
1 函数返回值一般在调用函数时已经分配指向该返回值的内存地址或寄存器;
2 函数调用的栈部分是连续的,通过esp,ebp相互赋值实现。创建新函数首先会将新的esp作为新函数的ebp;(因为该原因,所以可以被利用来作缓冲区溢出)
3 函数调用需要保存此前的CPU寄存器的值,通过新创建的栈空间来保存push(value)。
4 函数调用结束前会pop(value)返回前面函数时的cpu环境,从而实现了函数的调用。
5 函数内的变量是在ebp的基础上进行内存分配的。(如果分配的内存不够用,就会出现缓冲区溢出问题)