函数栈不平衡
Main函数中定义了一个变量, 四字节的变量 str
按照道理[ebp-4]保存的就是这个str, 结果 反汇编后,[ebp-8]保存了str!!!!!
[ebp-4]却木有保存,是怎么回事呢???
看反汇编吧:
- C/C++ code
int _tmain(int argc, _TCHAR* argv[]){00A614D0 push ebp 00A614D1 mov ebp,esp 00A614D3 sub esp,0CCh 00A614D9 push ebx 00A614DA push esi 00A614DB push edi 00A614DC lea edi,[ebp-0CCh] 00A614E2 mov ecx,33h 00A614E7 mov eax,0CCCCCCCCh 00A614EC rep stos dword ptr es:[edi] char const* const str="xx";00A614EE mov dword ptr [str],offset string "xx" (0A66800h) std::cout<<str;00A614F5 mov eax,dword ptr [str] 00A614F8 push eax 00A614F9 mov ecx,dword ptr [__imp_std::cout (0A69310h)] 00A614FF push ecx 00A61500 call std::operator<<<std::char_traits<char> > (0A61159h) 00A61505 add esp,8 return 0;00A61508 xor eax,eax
EBP = 0023F73C ,按照堆栈平衡,那么[ebp-4]的值是00A66800 即0023F738的值才是00A66800 ,而不是0023F734的值是00A66800 !!!
[解决办法]
哪个文件规定要从EBP-4开始分配变量空间?
编译器爱在哪里就放那里。。不要研究这种无聊的问题
[解决办法]
是不是把函数 局部变量 和 参数变量 搞混了?
参数变量[esp + 4](第一个参数)固定
局部变量在栈的偏移位置不固定
参数变量 才和 堆栈平衡 有点联系