void main()
{
?int i;
?int a[10];
?for(i = 0;i <=10;i ++)
??a[i] = 0;
}
大家看,很簡單的一個問題,但是為什么會一直執行呢?
明顯,聰明的你看出問題出現for(i = 0;i <= 10;i ++)???a[i] = 0;
總共定義了10個int,明顯循環超出了范圍,
下面我們就來看看其匯編如何運行,大家就都明白了.
00401031?? mov???????? eax,dword ptr [ebp-4]
00401034?? add???????? eax,1
00401037?? mov???????? dword ptr [ebp-4],eax
0040103A?? cmp???????? dword ptr [ebp-4],0Ah
0040103E?? jg????????? main+3Dh (0040104d)
00401040?? mov???????? ecx,dword ptr [ebp-4]
00401043?? mov???????? dword ptr [ebp+ecx*4-2Ch],0
0040104B?? jmp???????? main+21h (00401031)
程序一直在00401031-0040104B之間運行,問題出在00401043上面,
i變量在dwort ptr[ebp-4]
那么當執行到i =10
dword ptr[ebp + ecx*4-2cH]= dword ptr[ebp+dword ptr[ebp-4]*4-2ch]
=dword ptr[ebp + 10*4-44] = dword ptr[ebp-4]
哈哈,i變成了0