多函数压栈过程-参数总是在call后立即恢复
来源:互联网 发布:新店淘宝客 编辑:程序博客网 时间:2024/04/27 23:24
所以如果是值传递,函数调用后,值是不变的。因为函数里的参数在在调用时刻前压栈,然后对其修改,而call函数调用后,又恢复的。
所以没有对之前临时变量做任何改变。
改变的只是压栈的另一份拷贝变量,该份拷贝在调用后又恢复了。没有给实际的参数造成实际的改变。
3: void foo(int a,int b)
4: {
00401020 push ebp
00401021 mov ebp,esp
00401023 sub esp,40h
00401026 push ebx
00401027 push esi
00401028 push edi
00401029 lea edi,[ebp-40h]
0040102C mov ecx,10h
00401031 mov eax,0CCCCCCCCh
00401036 rep stos dword ptr [edi]
5:
6: printf("%d %d\n",a,b);
00401038 mov eax,dword ptr [ebp+0Ch]
0040103B push eax
0040103C mov ecx,dword ptr [ebp+8]
0040103F push ecx
00401040 push offset string "%d %d\n" (0042201c)
00401045 call printf (00401100)
0040104A add esp,0Ch
7: }
9: int main()
10: {
00401080 push ebp
00401081 mov ebp,esp
00401083 sub esp,48h
00401086 push ebx
00401087 push esi
00401088 push edi
00401089 lea edi,[ebp-48h]
0040108C mov ecx,12h
00401091 mov eax,0CCCCCCCCh
00401096 rep stos dword ptr [edi]
11: int a = 2;
00401098 mov dword ptr [ebp-4],2
12: int b =2;
0040109F mov dword ptr [ebp-8],2
13: foo(a,b);
004010A6 mov eax,dword ptr [ebp-8]
004010A9 push eax
004010AA mov ecx,dword ptr [ebp-4]
004010AD push ecx
004010AE call @ILT+5(foo) (0040100a)
004010B3 add esp,8----------------------------------恢复
14: printf("%d %d",a,b);
004010B6 mov edx,dword ptr [ebp-8]
004010B9 push edx
004010BA mov eax,dword ptr [ebp-4]
004010BD push eax
004010BE push offset string "%d %d" (00422024)
004010C3 call printf (00401100)
004010C8 add esp,0Ch------------------------------恢复
15: return 0;
004010CB xor eax,eax
16: }
- 多函数压栈过程-参数总是在call后立即恢复
- mysql恢复数据后总是自动停止
- 函数参数的压栈过程
- Ubuntu总是在十分钟后黑屏
- Wince下eVC开发WinSock程序,connect函数总是立即返回0的问题。
- DOM构造完成后,立即执行JS的函数
- Doc类初始化后就立即调用别的函数
- spring启动后立即执行指定的函数
- 定义js函数后立即执行的写法
- 控制台窗口在执行完毕后立即关闭
- mysql在插入记录后立即获得该记录id- -
- 在activity启动后立即弹出PopupWindow的两个方法
- 在activity启动后立即弹出PopupWindow的三个方法
- 在Linux下不重启让配置文件修改后立即生效
- 在activity启动后立即弹出PopupWindow的两个方法
- 在activity启动后立即弹出PopupWindow的两个方法
- CreateThread后立即CloseHandle,为什么线程还在运行?
- 如何在脚本配置环境变量后立即使用环境变量
- 泛型编程的困境
- android 中SQLiteDatabase的使用
- 野指针
- Delphi开发的WebService如何和Tomcat集成
- Hibernate的体系结构
- 多函数压栈过程-参数总是在call后立即恢复
- zen-cart 批量插件easy populat错误黄条Deleting of product data debris failed! ...
- 继承含泛型的父类
- web前端性能分析--实践篇
- 黑马程序员-面向对象
- fl2440的U-boot-2010.09移植(四) 添加NOR Flash启动支持
- 6、C语言中的字符串
- 对目录下文件进行简单批处理的脚本
- 周记