win32汇编 高手进

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:53:12
窗口处理函数如下,麻烦解释下第一个ret的作用
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ;窗口处理函数
.if uMsg == WM_DESTROY
invoke PostQuitMessage, NULL
.else
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret ;麻烦解释这个ret的作用
.endif
xor eax, eax
ret
WndProc endp
补充下一楼的:能理解您的意思,但是为何这一个API函数用到了ret,其它的很多都没有用到呢?回答这个问题后给分
WndProc是由WinMain中的lpfnWndProc指向的
请问一下这个长指针到底是怎么传参的?
具体怎么压栈的?

调用WndProc函数时会把下一条指令压栈,假如是00401234

如果接收到的消息不是WM_DESTROY
就会调用DefWindowProc函数,接着就ret直接退出WndProc去执行00401234

如果接收到的是WM_DESTROY,就 执行PostQuitMessage
然后执行xor eax,eax,然后ret退出WndProc函数,执行00401234
ret就是把esp弹出到EIP

如果调用DefWindowProc
后不用ret
那么程序就会继续执行下面的代码。当然你这个程序下面只有一句xor eax,eax,用不用ret都没问题,

分,分,分啊!!!!!!!!!!!!!!