函数调用战帧过程解析图
来源:互联网 发布:截面数据举例 政策 编辑:程序博客网 时间:2024/05/19 20:59
这里,我们来研究如下代码的栈帧过程。为了初学者理解汇编指令,所以编译环境是在vc++6.0下
#include<stdio.h>#include<stdlib.h>int sum(int _a,int _b){ int c=0; c=_a+_b; return c;}int main(){ int a=10; int b=20; int ret=0; ret=sum(a,b); printf("%d\n",ret); system("pause"); return 0;}
//如下是从vc++6.0中截取的汇编指令--- f:\vc\a\a.cpp ----------------------------------------10:11: int main()12: {00401060 push ebp00401061 mov ebp,esp00401063 sub esp,4Ch00401066 push ebx00401067 push esi00401068 push edi00401069 lea edi,[ebp-4Ch]0040106C mov ecx,13h00401071 mov eax,0CCCCCCCCh00401076 rep stos dword ptr [edi]13: int a=10;00401078 mov dword ptr [ebp-4],0Ah14: int b=20;0040107F mov dword ptr [ebp-8],14h15: int ret=0;00401086 mov dword ptr [ebp-0Ch],016:17: ret=sum(a,b);0040108D mov eax,dword ptr [ebp-8]00401090 push eax00401091 mov ecx,dword ptr [ebp-4]00401094 push ecx00401095 call @ILT+0(sum) (00401005)0040109A add esp,80040109D mov dword ptr [ebp-0Ch],eax18: printf("%d\n",ret);004010A0 mov edx,dword ptr [ebp-0Ch]004010A3 push edx004010A4 push offset string "%d\n" (00424024)004010A9 call printf (00401200)004010AE add esp,819:20: system("pause");004010B1 push offset string "pause" (0042401c)004010B6 call system (004010f0)004010BB add esp,421: }004010BE pop edi004010BF pop esi004010C0 pop ebx004010C1 add esp,4Ch004010C4 cmp ebp,esp004010C6 call __chkesp (00401280)004010CB mov esp,ebp004010CD pop ebp004010CE ret--- f:\vc\a\a.cpp ----------------------------------------1: #include<stdio.h>2: #include<stdlib.h>3:4: int sum(int _a,int _b)5: {00401020 push ebp00401021 mov ebp,esp00401023 sub esp,44h00401026 push ebx00401027 push esi00401028 push edi00401029 lea edi,[ebp-44h]0040102C mov ecx,11h00401031 mov eax,0CCCCCCCCh00401036 rep stos dword ptr [edi]6: int c=0;00401038 mov dword ptr [ebp-4],07: c=_a+_b;0040103F mov eax,dword ptr [ebp+8]00401042 add eax,dword ptr [ebp+0Ch]00401045 mov dword ptr [ebp-4],eax8: return c;00401048 mov eax,dword ptr [ebp-4]9: }0040104B pop edi0040104C pop esi0040104D pop ebx0040104E mov esp,ebp00401050 pop ebp00401051 ret
阅读全文
0 0
- 函数调用战帧过程解析图
- 函数调用过程解析图
- 函数调用过程解析图
- 函数调用过程解析图(函数栈帧)
- 函数调用过程解析
- C函数调用过程解析(x86-64 )
- 【C语言】函数调用过程解析(栈帧)
- 解析“进程、过程调用、函数调用、堆、栈”
- 解析“进程、过程调用、函数调用、堆、栈”
- 函数栈帧(函数调用过程详解)
- 函数调用栈帧过程带图详解
- 函数调用栈帧过程(带图详解)
- 函数调用过程栈帧变化详解
- 函数调用过程栈帧变化详解
- 函数栈帧的调用过程
- 描述函数栈帧的调用过程
- 函数调用过程及栈帧分析
- 栈帧与函数调用过程分析
- MySQL笔记八
- js for循环注意事项
- json类型转换异常与处理
- TCP,UDP
- Kafka学习之怎么保证不丢,不重复消费数据
- 函数调用战帧过程解析图
- iOS NavigationBar 导航栏背景颜色和避免因为设置属性translucent引起的frame改变问题
- MySQL笔记九
- 数字货币与区块链技术课程
- Home键的广播监听
- windows环境下搭建vue+webpack的开发环境
- 【剑指offer】面试题41:数据流的中位数
- 不可重复度和幻度的区别
- JavaScript学习笔记——闭包详解