堆栈框架(stack frame)也称活动框架(activation record),他是为传递的参数、子例程的返回地址、局部变量和保存的寄存器保留的堆栈空间。
堆栈框架的创建步骤:
(1)如果有传递的参数,则压入堆栈
(2)子例程被调用,子例程的返回地址压入堆栈
(3)子例程开始执行时,EBP被压入堆栈
(4)EBP设为ESP的值,ESP减去一个数值,EBP就被作为寻址所有子例程参数的基址指针使用了
(5)如果有局部变量,ESP减去一个数值,以便在多站上为局部变量保存空间
(6)如果任何寄存器需要保存,则压入堆栈
堆栈结构的结构受程序的内存模式及参数传递约定的直接影响。
1、堆栈参数
被调用的子例程访问调用子例程时压入堆栈的参数。在进行子例程调用是在多站上压入了两类参数:
值引用(变量和常量的值)
引用参数(变量的地址)
值传递:在堆栈上压入变量值的一份副本的方式传递参数
push va1
push va2
call AddTwo
传递引用:传递的参数是一个对象的地址
push OFFSET va1
push OFFSET va2
call swap
传递数组:传递数组时,总是传递引用
.data
array DWORD 50 DUP(?)
.code
push OFFSET array
call ArrayFill