存储参数
1.push
先执行push 2,在push1。栈从上往下(1,2是参数)
call—〉返回一个地址,并将下一个指令地址存入栈中
401171—〉函数执行完的返回地址(简称返回地址)
保留栈底
2.push ebp
将ebp里的值放入了栈里面
提升栈顶
3.mov ebp,esp
将esp里的值放入ebp中
4.Sub esp,40
esp-四零,(四零是16进制,一格有四个除以四,等于一零,在换算成十进制就是16个,栈的格数就往上数16个)
esp:12fee4
保存现场
5.Push ebx
push ebx—〉将ebx里面的值存入栈中,esp+4
清除垃圾数据
6.Lea edi,Dword ptr ss:[ ebp 40]
取[ebp- 40]的地址编号放入edi里面
edi变为0012f114(栈没有发生变化
7.清数据
将eax里面的字符串放入edi指向的内存地址中,edi加(减)四。一共重复16次,每重复一次,ecx- 1
(rep重复)
计算(正式工作。。。
8.计算
[ebp+8]地址里面的值放入了eax中
栈平衡
9.恢复现场
执行后
10.
11
retn——pop eip
Eip会变成401171
12.外平栈
add esp,8
标签:16,edi,esp,push,地址,ebp,堆栈 From: https://www.cnblogs.com/yuli10952/p/18249246