枫辰 发表于 2013-5-4 15:11:26

win32 汇编中的问题


[*]   .else
[*]            invokeDefWindowProc,hWnd,uMsg,wParam,lParam
[*]            ret
[*]      .endif
[*];********************************************************************
[*]      xor eax,eax
[*]      ret
win32第一个窗口程序中窗口过程的部分代码 我想知道其中ret 返回到哪了? 每个invoke调用函数的时候是不是都 必须返回啊?

翱翔飛龍 发表于 2013-5-4 18:02:23

我也想知道,求解

dAb 发表于 2013-5-4 19:44:02

返回到你用invoke或CALL调用的下一句是不是必须返回得看你的代码,如果你RET前用了结束程序的代码,那就不可能返回了,一般的都是应该返回的

CJRLLH 发表于 2013-5-4 19:56:55

我也得好好学一下汇编

gb1984321 发表于 2013-5-11 13:19:47

我只是路过打酱油的。

540167078 发表于 2013-5-13 17:56:17

我只是路过打酱油的。

互微时代 发表于 2013-5-13 19:20:47

返回函数调用之前。

dAb 发表于 2013-5-17 00:48:29

董卓宴请吕布、张飞、关羽等人。席间貂禅给众人倒酒,忽然灯灭!等重新点灯后见众人手皆黑!董卓大笑:我已在貂禅的双乳上涂上墨汁,唯吕兄正直!吕布大笑,众人见齿黑!

枫辰 发表于 2013-5-17 01:58:36

dAb 发表于 2013-5-17 00:48 static/image/common/back.gif
董卓宴请吕布、张飞、关羽等人。席间貂禅给众人倒酒,忽然灯灭!等重新点灯后见众人手皆黑!董卓大笑:我已 ...

什么啊    什么 啊 帮我 解释啊

dAb 发表于 2013-5-19 22:09:32

本帖最后由 dAb 于 2013-5-19 22:13 编辑

枫辰 发表于 2013-5-17 01:58 static/image/common/back.gif
什么啊    什么 啊 帮我 解释啊
invoke是可以检查参数的,一般系统API的返回值都是在EAX。。程序的返回是在你调用的下一句代码处。。
多跟踪调试自己的程序,这样才可以更深地了解。。别人说的可能深了你就难懂,跟着书本做,然后用OD之类的调试器单步调试自己的程序,慢慢观察过程。。自己走一遍程序,好过在网上问啊。。。

枫辰 发表于 2013-5-20 02:48:00

dAb 发表于 2013-5-19 22:09 static/image/common/back.gif
invoke是可以检查参数的,一般系统API的返回值都是在EAX。。程序的返回是在你调用的下一句代码处。。
多 ...

谢谢啊   我知道了 谢谢

姗姗莱咫 发表于 2013-5-21 12:49:02

强烈支持楼主ing……

jjaicx 发表于 2013-5-21 23:57:19


这要看你ret之前的栈内存的内容是多少

nios 发表于 2013-5-21 23:57:28

invoke 调用的API函数返回值保存在eax中,基本上所有的win32api都有返回值的。

属専色灰 发表于 2013-5-23 06:21:25

在OD里这个函数上下一个断点!然后你运行一下,结果就有了,哈哈!!!!多谢你提示啊,本来这里我也不知道,现在知道了。

属専色灰 发表于 2013-5-23 06:25:17

本帖最后由 属専色灰 于 2013-5-23 06:51 编辑

98页有张图片,完美的解释啊!!!

常用的消息循环,注意DispatchMessage只是一个回调函数而已,他内部调用USER32,
;USER32又调用我们的窗口过程,等到窗口过程返回,那么它是返回到我们的USER32去了,
;USER32处理好后返回就是我们的这里啦!然后就是新的一层循环!建议不要在USER32
;里面浪费时间,就只要看他的流程方向就行了

1236 发表于 2013-5-23 18:55:02

每个都返回 ?这倒不必别忘了 在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]
查看完整版本: win32 汇编中的问题