- 论坛徽章:
- 0
|
这样的一段代码,输出比较费解。
int main(void)
{
printf( "%d" );
return 0;
}
反汇编如下(编译器是VC6):
0040B750 push ebp
0040B751 mov ebp,esp
0040B753 sub esp,40h
0040B756 push ebx
0040B757 push esi
0040B758 push edi //这里ESP=0x0012FF34
0040B759 lea edi,[ebp-40h]
0040B75C mov ecx,10h
0040B761 mov eax,0CCCCCCCCh
0040B766 rep stos dword ptr [edi]
16: printf( "%d" );
0040B768 push offset string "%d" (0042012c) //这里ESP=0x0012FF30
0040B76D call printf (00401060)
0040B772 add esp,4
按理说,0x0012FF34单元的内容,会被当作printf的可变参数来处理,而[0x0012FF34]是0,这样应该输出0,但实际输出却不是。
请问这是什么原因,求解。
这个问题貌似简单,其实未必简单! |
|