堆栈2

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

 

posted @ 2024-12-03 22:00  Auriry  阅读(3)  评论(0编辑  收藏  举报