函数堆栈图(函数调用的本质)

程序起始点
在这里插入图片描述
寄存器情况
在这里插入图片描述
找到函数入口,按f2让cpu执行到这里
在这里插入图片描述
寄存器情况
在这里插入图片描述
按f8单步执行函数,查看EBP和ESP寄存器

push 2,push 1 参数入栈

在这里插入图片描述
在这里插入图片描述

call :1.改变EIP的值;2.把下一个语句的地址入栈(与jmp的区别)

后面的地址=当前地址(40116C)+当前指令长度(当前是长度5字节)
在这里插入图片描述

执行函数体

遇到call按f7,然后遇到jmp按回车键转到函数体
在这里插入图片描述
在这里插入图片描述
通过sub开辟的空间
在这里插入图片描述
CCCCCC表示int 3 中断,防止缓冲区溢出
在这里插入图片描述
这是该函数的主要功能, 即把2+1相加。EBP+8的地址的是1,EBP+C地址存的是2.
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
回到调用前的状态
在这里插入图片描述

总结

在这里插入图片描述

也可以把参数传到寄存器里,想法设法保存这些值即可,如把返回值(即计算好的值)传到内存保存起来。
在这里插入图片描述

mian函数调用一个空函数汇编层面所做的事

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值