从汇编角度看函数

28 篇文章 2 订阅
19 篇文章 4 订阅

1. 函数简介

在代码开发过程中,函数是一个必然存在的,它是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带有一入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理,所谓出口,就是指函数的计算结果,也称为返回值,在计算机求得之后,由此口带回给调用它的程序。

函数主要需要关注两个方向问题:函数参数,函数返回值

2. 从汇编中看函数

函数功能的实现部分

PUSH EBP				提升堆栈,为函数执行提供空间			
MOV EBP,ESP							
SUB ESP,20							
PUSH EBX				保留现场:函数在执行的时候会用到一些寄存器,但这些寄存器中的值很可能会被后面的			
PUSH ESI				程序用到,所以要先存储到内存中			
PUSH EDI							
LEA EDI,DWORD PTR SS:[EBP-20]				向分配的空间填充数据			
MOV ECX,16							
MOV EAX,CCCCCCCC							
REP STOS DWORD PTR ES:[EDI]							
MOV EAX,DWORD PTR SS:[EBP+4]				该函数的功能			
ADD EAX,DWORD PTR SS:[EBP+C]							
POP EDI									恢复现场			
POP ESI							
POP EBX							
MOV ESP,EBP							降低堆栈			
POP EBP								恢复栈底数据			
RETN								函数执行完毕,返回到调用处			
							

函数的调用部分

	PUSH 8				函数的参数	
	PUSH 1					
	CALL 0040200A		调用函数	
							
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小道安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值