【发布时间】:2010-10-06 18:48:24
【问题描述】:
我正在构建一个没有任何宏的 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
【问题讨论】:
-
为什么“没有任何宏”?
-
为什么?两个原因: 1) 我想查看 Windows 二进制文件的详细信息。 2) 我想在 C 程序中构建一个汇编程序。为什么?我只是一个非常好奇的人......
-
硬编码地址 = no-no.
-
@Jens Björnhager:我知道这不是一个好习惯,但正如我上面解释的,这更多是出于好奇。我希望这段代码没有链接器的东西(至少我需要确保这是可能的)。我认为这是可能的,因为我在代码中硬编码了几个 API 的地址,仅用于
DefWindowProc它不起作用...不知道为什么 :( -
您可以通过实际使用汇编程序来免费编写链接器。
标签: assembly windows-xp masm32