win32 汇编中的问题
[*] .else
[*] invokeDefWindowProc,hWnd,uMsg,wParam,lParam
[*] ret
[*] .endif
[*];********************************************************************
[*] xor eax,eax
[*] ret
win32第一个窗口程序中窗口过程的部分代码 我想知道其中ret 返回到哪了? 每个invoke调用函数的时候是不是都 必须返回啊? 我也想知道,求解
返回到你用invoke或CALL调用的下一句是不是必须返回得看你的代码,如果你RET前用了结束程序的代码,那就不可能返回了,一般的都是应该返回的 我也得好好学一下汇编 我只是路过打酱油的。 我只是路过打酱油的。 返回函数调用之前。 董卓宴请吕布、张飞、关羽等人。席间貂禅给众人倒酒,忽然灯灭!等重新点灯后见众人手皆黑!董卓大笑:我已在貂禅的双乳上涂上墨汁,唯吕兄正直!吕布大笑,众人见齿黑! dAb 发表于 2013-5-17 00:48 static/image/common/back.gif
董卓宴请吕布、张飞、关羽等人。席间貂禅给众人倒酒,忽然灯灭!等重新点灯后见众人手皆黑!董卓大笑:我已 ...
什么啊 什么 啊 帮我 解释啊 本帖最后由 dAb 于 2013-5-19 22:13 编辑
枫辰 发表于 2013-5-17 01:58 static/image/common/back.gif
什么啊 什么 啊 帮我 解释啊
invoke是可以检查参数的,一般系统API的返回值都是在EAX。。程序的返回是在你调用的下一句代码处。。
多跟踪调试自己的程序,这样才可以更深地了解。。别人说的可能深了你就难懂,跟着书本做,然后用OD之类的调试器单步调试自己的程序,慢慢观察过程。。自己走一遍程序,好过在网上问啊。。。 dAb 发表于 2013-5-19 22:09 static/image/common/back.gif
invoke是可以检查参数的,一般系统API的返回值都是在EAX。。程序的返回是在你调用的下一句代码处。。
多 ...
谢谢啊 我知道了 谢谢 强烈支持楼主ing……
这要看你ret之前的栈内存的内容是多少 invoke 调用的API函数返回值保存在eax中,基本上所有的win32api都有返回值的。 在OD里这个函数上下一个断点!然后你运行一下,结果就有了,哈哈!!!!多谢你提示啊,本来这里我也不知道,现在知道了。 本帖最后由 属専色灰 于 2013-5-23 06:51 编辑
98页有张图片,完美的解释啊!!!
常用的消息循环,注意DispatchMessage只是一个回调函数而已,他内部调用USER32,
;USER32又调用我们的窗口过程,等到窗口过程返回,那么它是返回到我们的USER32去了,
;USER32处理好后返回就是我们的这里啦!然后就是新的一层循环!建议不要在USER32
;里面浪费时间,就只要看他的流程方向就行了
每个都返回 ?这倒不必别忘了 在win32程序中eax中存放的是一个函数结束时的返回值DefWindowProc这个函数 是windows默认帮你处理的函数举个例子 .if eax == WM_COMMAND.elseif eax ==WM_CLOSE
.else invoke DefWindowProc... 也就是除了COMMAND消息或者关闭消息做的其他一切关于窗口的事情DefWindowProc都会默认帮你处理这个函数中,eax中肯定要存放返回值的,至于COMMAND 和关闭消息要清零,也就是xor eax,eax是为了清除eax中的返回值。。。 打了这么多字 不知道你看懂没,反正我是晕了。。。 :lol
页:
[1]