您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页计算机是如何运行的

计算机是如何运行的

来源:步遥情感网

 

把C语言源代码反汇编成32位汇编代码

 

去掉干扰代码后的干净代码

 

 

下面我们对这段代码进行分析

注:ebp后的数字代表ebp所在位置,eip后面数字代表反汇编后代码(上图)执行位置;

初始状态下ebp和esp都指向栈底,即空栈,pushl %ebp之后,esp-4然后把当前ebp压入栈中,movl %esp,%ebp相当于C语言ebp=esp,subl $4,%esp和movl $6,(%esp)相当于pushl $6

subl $4,%esp就是把esp减去4也就是向下移动一个单位, movl 8(%ebp),%eax 相当于eax=*(int32_t *)(ebp+8)此时eax=6,同理call g与call f一样;

leave相当于movl %ebp,%esp, popl %ebp;


  总结:由上述分析可以看出,计算机在执行函数调用和函数的参数传递都是通过使用栈来进行的,在调用函数时,先对eip进行保存方便函数调用结束后返回执行,然后保存ebp栈底方便恢复栈在调用之前的状态,最后清空栈使ebp=esp方便函数使用;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务