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