【C++】函数堆栈调用以及反汇编的了解

1、思考

在函数调用的过程我们可以看作是一个调用链。
例如:在main函数中调用Sum函数,其中main为调用方,Sum为被调用方
问题一:被调用方执行完后,怎么回退到调用方函数???
问题二:被调用方函数执行完回到调用方函数后,怎么知道延下一行继续执行??
问题三:返回值是由什么带出来的??
问题四:形参需不需要开辟内存?如果形参开辟内存,在哪里开辟的?
2、在虚拟地址空间有一块区域,称为栈区,它是所有函数的活动区域。
而栈区是由栈帧组成的,栈帧是每一个函数的活动区域。
3、知道栈后,想要解决上面的问题还需要通过在底层通过反汇编看每一天指令的运行。

4、汇编

汇编分为(1)Linux下的AT&T(2)Windows下的inter X86
两者的区别举例说明:int a = 10;
在Linux下汇编的指令是 mov 0a , dword ptr[a]
在Windows下汇编的指令是 mov dword ptr[a] , 0a
则除操作码以外,Linux下是从左往右看。Windows下是从右往左看。

5、寄存器

(1)用来存储数据的寄存器:eax 、ebx、ecx、edx
(2)栈底指针寄存器:ebp;栈顶指针寄存器:esp
栈顶指针寄存器和栈底指针寄存器共同标识一个栈帧。
(3)pc下一行指令寄存器

6、汇编指令

(1)mov 移值指令

a = 20;
反汇编:mov dwoad ptr[a],14  //表示把20放在a的地址下,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值