debug默认不开优化的,当然炸了。
你自己看看开优化后的代码就知道为什么了
[C] 纯文本查看 复制代码 #include <stdio.h>
char * f()
{
char str[32] = "haha";
return str;
}
int main(int argc, char ** argv)
{
printf("%s\n",f());
return 0;
}
[Asm] 纯文本查看 复制代码 01361040 >/$ 55 push ebp
01361041 |. 8BEC mov ebp,esp
01361043 |. 83EC 20 sub esp,0x20
01361046 |. A1 18303601 mov eax,dword ptr ds:[0x1363018]
0136104B |. 0F57C0 xorps xmm0,xmm0
0136104E |. 8945 E0 mov [local.8],eax
01361051 |. A0 1C303601 mov al,byte ptr ds:[0x136301C]
01361056 |. 8845 E4 mov byte ptr ss:[ebp-0x1C],al
01361059 |. 8D45 E0 lea eax,[local.8]
0136105C |. 50 push eax
0136105D |. 68 20303601 push test.01363020 ; ASCII "%s\n"
01361062 |. 0F1145 E5 movups dqword ptr ss:[ebp-0x1B],xmm0
01361066 |. 66:C745 FD 00>mov word ptr ss:[ebp-0x3],0x0
0136106C |. 660fd645 f5 movq qword ptr ss:[ebp-0xb],xmm0
01361071 |. C645 FF 00 mov byte ptr ss:[ebp-0x1],0x0
01361075 |. E8 96FFFFFF call test.printfTStartupile_modenitializ>
0136107A |. 83C4 08 add esp,0x8
0136107D |. 33C0 xor eax,eax
0136107F |. 8BE5 mov esp,ebp
01361081 |. 5D pop ebp ; kernel32.75BE8744
|