关于VC++的函数调用堆栈问题
为什么VC在生成函数的汇编时要在堆栈上放0x40bit的空白。这样的话我在fc嵌入的汇编中如果要找得函数返回的地址需要从ESP减去局部变量,然后再前去44h。
看看下面的这个FC函数生成的汇编:
void fc()
{
printf("call");
}
//////////////////////////////////////////////
30: printf("call");
void fc()
29: {
00401080 push ebp
00401081 mov ebp,esp
00401083 sub esp,40h //看看这里
00401086 push ebx
00401087 push esi
00401088 push edi
00401089 lea edi,[ebp-40h]
0040108C mov ecx,10h
00401091 mov eax,0CCCCCCCCh // 填充
00401096 rep stos dword ptr [edi]
00401098 push offset string "call" (00423ff8)
0040109D call printf (004010c0)
004010A2 add esp,4
31: }