c++
c++程序调用内核堆栈的呢?
CPU
cpu
回想这个时先回想一下虚拟空间的空间布局和调用约定
| int sumint aint b { tmp=a+b; return tmp; } int main() { int b=20; ret=sum(a,b); Printf(“%d”,ret); } |
1G3G
| 128M | 0x00000000 -- 0x0804 8000 |
| .text | |
| .data | |
| .bss未初始化 | (执行前清0 |
| heap | |
| 共享库 | |
| stack | |
| 环境变量 | 0xc000 0000 |
| DMA | |
| NORMAL | |
| HIGHMEM | 0xffff ffff |
函数调用的具体情况:
Push pop eaxebx
ebpespcall
4eax8
具体实现如下:
| tmp |
| mainebp |
| 下一条指令的地址 (&&printf |
| X X X X X X X X X X |
| mainCRTstartup |
关于四种调用约定:
pasclcall
_cdeclc
_stdcallwindows
_fastcall
1)_stdcall
2)4 stdcall
_thiscallc++
//
c++
cc++
c++/text
栈:局部变量,参数,编译器自动开辟释放,相当于计算机系统的数据结构分配专门的寄存器来存储栈的地址,所以效率较高,内存空间连续,但由于向下开辟,空间有限
newmalloc
/databass
data
text