Windows 程序集疑问 - x86
我正在构建一个没有任何宏的 Windows 程序集程序。所以我下载了一个使用宏的程序,并将其转换为“纯”汇编代码。
然而我在这里面临一个问题。有一个标签@@:
我看不懂,还有一个跳转jne @F
我没看懂。这2个符号是什么?
MyWndProc:
push ebp
mov ebp, esp
cmp DWORD PTR [ebp+12], 2 ;WM_DESTROY=2
jne @F
push ecx
push NULL
mov dword ptr ecx, 7e42ca5ah ;address of PostQuitMessage
call ecx
pop ecx
@@:
push DWORD PTR [ebp+20]
push DWORD PTR [ebp+16]
push DWORD PTR [ebp+12]
push DWORD PTR [ebp+8]
call DefWindowProc
;mov dword ptr edx, 7e42c17eh
;call edx
leave
ret 16
另外,对于 PostQuitMessage API,我可以硬编码内存地址(在 WinXP 32 位 SP3 英语上),但对于 DefWindowProc 它可以编译,但在执行时会中断。有人知道为什么吗?
感谢大家的支持。
PS:我使用的是masm32
I'm building a Windows Assembly program without any macro. So I downloaded a program that was using macros, and I'm converting this into "pure" assembly code.
However I'm facing one issue here. There's a label @@:
that I don't understand, and also a jump jne @F
that I didn't get it. What are these 2 symbols?
MyWndProc:
push ebp
mov ebp, esp
cmp DWORD PTR [ebp+12], 2 ;WM_DESTROY=2
jne @F
push ecx
push NULL
mov dword ptr ecx, 7e42ca5ah ;address of PostQuitMessage
call ecx
pop ecx
@@:
push DWORD PTR [ebp+20]
push DWORD PTR [ebp+16]
push DWORD PTR [ebp+12]
push DWORD PTR [ebp+8]
call DefWindowProc
;mov dword ptr edx, 7e42c17eh
;call edx
leave
ret 16
Also for PostQuitMessage
API I could hard-code the memory address (on WinXP 32bits SP3 english), but for DefWindowProc
it compiles, but it breaks when executing. Does someone know why?
Thanks for support guys.
PS.: I'm using masm32
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
@@
是一个匿名本地标签。文件中可以有很多这样的内容jne @F
表示跳转到当前位置之前最近的@@
。The
@@
is an anonymous local label. You could have many of them in the file Thejne @F
means jump to the nearest@@
ahead of the current location.