進(jìn)入main函數(shù)的時候,
1)保存ebp指針
2)使得ebp->esp
3)保持現(xiàn)場ebx,esi,edi
4)進(jìn)入一般函數(shù)的時候,push參數(shù),例如有n個參數(shù) esp = esp - 4*n
5)push函數(shù)返回地址 esp = esp -4
6)調(diào)用函數(shù) EIP指向函數(shù)地址,jmp 函數(shù)地址
7)Push ebp 保存 (故有[ebp+8]就是第一個參數(shù)的內(nèi)容)
8)使得ebp ->esp, esp = esp - 40h - 臨時變量需要字節(jié)數(shù)(有字節(jié)對齊問題)
9)保持現(xiàn)場ebx,esi,edi
10)返回值=》eax
11)恢復(fù)現(xiàn)場,就是依次pop出edi,esi,ebx,
12)Esp = ebp
13)Pop ebp
14)pop 函數(shù)返回地址(即ret),EIP指向下個指令地址 esp = esp +4
15)Esp + n*4 (每個字有4個字節(jié));push是按字操作的,32位機(jī)器
知道這些后,程序的溢出就比較容易做了。
http://hi.baidu.com/goodallen/blog/item/1a2e23fc07b7e487b901a0cb.html/cmtid/494b414bcea227fc82025ca2