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