1、
2、push 3
push 2
push 1
只有ESP发生变化(ESP=ESP-c),1、2、3也被压入栈
3、CALL 00401005(按F7不按F8)
把这个值(它的下一行)压入堆栈,EIP修改00401005(与9相同)
按F7之后会生成一个JMP指令
4、PUSH EBP
MOV EBP,ESP
SUB ESP,48
5、PUSH EBX
PUSH ESI
PUSH EDI
6、
EBP-48放入EDI,12赋值给ECX,赋值EAX,第四行是重复12次(EBP-48,48/4=12)将CCCCCCCC放入EDI的内存中,STOS每执行一次就会加四或减四(由D位决定)
7、
EAX变成2(EBP+C的位置是2)
8、
原本ESP=EDI,第一行是EAX=ESP-4,第二行是ECX=1(EBP+8的位置是1),第三行ECX=ESP-4
9、CALL 0040100A(在00401097那一行)
先将它的下一行0040109c压入栈
esp-4,eip+5,esp=12FEC0
10、
ebp压栈,esp-4,esp赋给ebp,esp-44
11、
(1)保护现场EBX,ESI,EDI
(2)ESP-44存入EDI
(3)11赋给ECX
(4)CCCCCCCC赋给EAX
(5)将EAX重复写入到以EDI为首的地址的缓冲区中,重复11次,每次EDI+4
EBP=12FEBC
12、
把0A放到EBP-4;把EBP+8中的1放到EAX;EBP+C中的2再加到EAX中,此时EAX为3;EBP-4的0A加到EAX中,此时EAX为D;堆栈不变,ESP不变
13、
14、
ESP=EBP;把里面的值0012FF20pop到EBP里面去,同时ESP+4
15、
RETN
相当于pop eip,所以首先ESP+4变成12FEC4,EIP是40109c
16、ADD ESP,8
17、
把EAX的值D放入EBP-8;EAX=2;EAX=2+D=F;EAX=F+3(EBP+10)=12;不改变堆栈
18、
ESP=ESP+C=12FECC+C=12FED8
19、ADD ESP,48
20、CMP EBP,ESP
相当于减法,减了之后等于0,Z位变成1