正常情况下我们栈的寻址方式是EBP+偏移的方式来寻址的,我们先来看一段代码,这是一段裸函数的汇编
//保留调用前的栈底
PUSH EBP //这里会保留栈底
//提升堆栈
MOV EBP,ESP //我们可以知道这种方式EBP(栈底)寻址时是不会发生变化的,栈底我们是不会去改变它的,所以我们在寻址时都是EBP+...
SUB ESP,0x40
//保留现场
PUSH EBX
PUSH ESI
PUSH EDI
//开始填充缓冲区
MOV EAX,0xCCCCCCCC
MOV ECX,0x10
LEA EDI,[EBP-0x40]
REP STOSD
//恢复现场
POP EDI
POP ESI
POP EBX
//降低堆栈
MOV ESP,EBP
POP EBP
RET
但是这种方式不是编译器所采用的方式,而编译器会采用如下的方式来寻址,我们来看看
<