函数战争,哦,不不不,是函数栈帧!"/>
函数战争,哦,不不不,是函数栈帧!
初学C语言听到这个四个字时,对,没错,一直以为时函数战争,当时还以为编程界发生了一场什么惊天动地大变革,当真正看到并且重新听到这四个字时才知道,一切都是—-错觉……
要想了解了解函数在程序底部实现过程,得先普及一下栈帧和一些小知识点。
栈,程序运行时系统为该程序分配的内存区;
帧,则是每个函数从该栈获得的空间,是针对函数而言的。因此每个函数都有自己独立的栈帧,栈帧维护着该函数调用的各种信息。
另外再说两个两个寄存器:
ESP:当前栈的栈顶,指向高地址
EBP:当前帧的底部,指向低地址
地址使用规则:先使用高地址再使用低地址,故先进栈的后出栈,后进栈的先出栈
PUSH:压栈操作 POP:出栈操作
## 比较重要的例子 ##
lea edi,[ebp-0C0h] mov ecx,30h mov eax,CCCCCCCCh rep stos dword ptr es:[edi]
rep指令的目的是重复其上面的指令。
exc的值是重复的次数.
stos(store into String)指令的作用是将eax中的值拷贝到ES:EDI指向的地址。
dword ptr:在没有寄存器名存在的情况下,用操作符“X ptr”指明内存单元的长度,X在汇编指令中可以为word 或者byte。dword是指一次拷贝双字(四字节)的数据到目的地址, ptr即pointer (既指针)得缩写 (ptr和 dword一般一起使用定义传输类型)
下面就用图来解释下,先友情提醒,图,真的画的不好看,因为是第一次用电脑画图…../手动笑哭
——————————–我是分割线—————————————
最后的啰嗦
这个博客本应在一礼拜前就写出来,奈何事情比较多,自我学习较慢,导致拖更。额,说歪了,写小说的名词都涌进来了(额,我不写小说,不用留言问我写的什么小说),其实说到底是自己懒了。因为时间就像那个啥,哈,挤一挤还是有的…
这篇博客自我感觉写的比较简单。如果哪里写错了,希望各位看官不吝自己的想法,能私信或者评论回复,指出我的错误。再说下,我是很建议评论提出问题的。不论是否认识,我想博主都蛮希望大家能提出自己的见解的。嗯,话太多了,就这样吧。
更多推荐
函数战争,哦,不不不,是函数栈帧!
发布评论