一 . 基本概念
-
函数是什么:
一些指令的集合。 -
如何调用函数:
用 call指令
- 为什么:(对比jmp指令)
- 参数与返回值:
举例:编写一个函数,得到任意两个整数的和
绿色框框:函数(整数相加),用EAX传递返回值
紫色框框:用ECX,EDX传递参数
二. 用堆栈的方式传递参数(实现堆栈平衡的两个方式)
- 堆栈平衡是什么
经过一系列变化后(参数、函数等的临时存储),堆栈里的栈顶指针依旧不变【ESP的值依旧不变】
1.(函数内平衡)保证ret这条指令前,ESP是压入函数的初始值
举例:
如果有10个参数怎么办?——没有那么多寄存器。
- 向堆栈push1~5个数
- 接着call指令
在(call指令对应的)特定地址依次:
- ADD EAX,DWORD PTR DS:[ES