从汇编角度看函数

Posted 小道安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从汇编角度看函数相关的知识,希望对你有一定的参考价值。

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		调用函数	
							

以上是关于从汇编角度看函数的主要内容,如果未能解决你的问题,请参考以下文章

从汇编指令角度理解函数调用过程

c语言中函数调用的本质从汇编角度分析

从汇编角度来理解linux下多层函数调用堆栈运行状态

从汇编层面看函数调用的实现原理

从汇编角度分析C语言的过程调用

从汇编看c++函数的默认参数