堆栈图1

一、

1、找到画堆栈图从401168开始画,ctrl+g出来一个弹窗,在弹窗上输入要找到哪一行输入0x401168,他会直接跳转

2、在那一行f2下断点点开始运行让cpu运行到该行停止(画堆栈图要关注栈底EBP,栈顶ESP两个寄存器)

(1)调用前

(2)push2:栈顶减4,2被压入,为压栈

push2之后栈顶减了4,2被压入,为压栈

(3)push1

(4)call 0x0040100A,到相应位置,ESP减4,EIP变成跳转后的地址(这行指令相当于mov EIP,0x0040100A),而call指令的下一行地址(0040116C加上E8、99、FE、FF、FF五个字节变成00401171)被压入栈顶

!!call这里不能用f8来运行,只能用f7!!

 

按一下enter,回到要画堆栈图的那段程序

 

(5)push EBP:ESP减4,eip为运行到的地址,EBP的值被压到栈顶

 (6)mov ebp,esp:把ESP的值赋给ebp,只有ebp和eip变了

 

(7)sub ESP,40:ESP减了40(16进制),eip改变

 

减40(16进制)一个框为四个字节,40/4=10(16进制)转换为10进制的为16,所以往上数16格

 

(8)push EBX:ESP和栈顶减4,EBX中的值push到内存栈顶中

(9)push ESI

        push EDI

 

(10)LEA EDI,DWORD PTR SS:[ESP-40]:堆栈没有变化,将ESP-40后的值放到EDI中

 

 

(11)MOV ECX,10

          MOV EAX,CCCCCCCC

         REP STOS DWORD PTR ES:[EDI]

STOS是看D位为0加4为1减4,将CCCCCCCC赋给EAX在把他放到EDI指向的内存里然后加4(此处D位为0),再把CCCCCCCC赋给EAX再放到EDI加4后的地址中再加4,REP重复16次(10为16进制换为10进制为16次)

FEE4到FF24全部变成cc

 

 

posted @ 2024-11-17 20:40  Auriry  阅读(4)  评论(0编辑  收藏  举报