-
-
[旧帖]
程序调试时_chkesp的问题,谢谢!!
0.00雪花
-
发表于:
2009-9-22 14:04
1308
-
[旧帖] 程序调试时_chkesp的问题,谢谢!!
0.00雪花
最近在调试段代码时,发现点问题,看了反汇编,还是不明白原因,恳请哪位高人指点,不胜感激!
下面的一句
pinstance->Decfun(pinstance->lplay_handle, (char *)picture_buf, mLength, &Frame_info, pinstance->pUser, reserve);
我的程序每次到这里都出错!!
pinstance->Decfun是一个函数指针。
格式为VOID (* DecCBFun)( LONG lHandle,CHAR * pBuf,LONG lSize, FRAME_INFO * pFrameInfo, VOID* pUserData, LONG lReserved)
02408855 mov esi,esp '保存esp
02408857 mov eax,dword ptr [reserve]
0240885D push eax '参数入栈 esp - 4
0240885E mov ecx,dword ptr [ebp-4]
02408861 mov edx,dword ptr [ecx+0AF0h]
02408867 push edx '参数入栈 esp - 4
02408868 lea eax,[Frame_info]
0240886E push eax '参数入栈 esp - 4
0240886F mov ecx,dword ptr [mLength]
02408875 push ecx '参数入栈 esp - 4
02408876 mov edx,dword ptr [ebp-6Ch]
02408879 push edx '参数入栈 esp - 4
0240887A mov eax,dword ptr [ebp-4]
0240887D mov ecx,dword ptr [eax+0AE8h]
02408883 push ecx '参数入栈 esp - 4
02408884 mov edx,dword ptr [ebp-4]
02408887 call dword ptr [edx+0BA0h] '???调用函数指针,我在这里发现函数调用后esp已经恢复成原来的值
0240888D add esp,18h '???esp恢复,这里再+18h已经与原来esp不相同了
02408890 cmp esi,esp '与原来的esp比较
02408892 call _chkesp (02427cb0) '出错
为什么这里call调用后,esp会马上恢复,而不需要再 + 18h??
02408887 call dword ptr [edx+0BA0h]
恳请哪位高人指点解惑,非常谢谢!!