2010-10-06 30 views
4

我正在构建一个没有任何宏的Windows装配程序。所以我下载了一个使用宏的程序,并将其转换为“纯”汇编代码。Windows装配疑问 - x86

但是我在这里面临一个问题。有一个标签@@:,我不明白,也跳转jne @F,我没有得到它。这两个符号是什么?

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

+0

为什么“没有任何宏”? – Andrey 2010-10-06 18:51:00

+1

为什么?两个原因:1)我想看看Windows二进制文件的细节。 2)我想在C程序中构建一个汇编程序。为什么?我只是一个*非常*好奇的人... – jyz 2010-10-06 19:04:04

+0

硬编码地址= no-no。 – 2010-10-07 00:07:23

回答

4

@@是一个匿名的本地标签。您可以在文件中包含许多文件jne @F表示在当前位置之前跳至最近的@@

+0

好的,谢谢。 DefWindowProc的问题?任何想法? – jyz 2010-10-06 18:56:22

+0

不能告诉你没有更多的代码DefWindowProc是你的另一个例程吗? – 2010-10-06 20:06:58

+0

不,DefWindowProc是一个Windows API。这个例程负责获取Windows消息...我'我发现它在我的机器上使用arwin工具的地址,但这是唯一的API,我不能硬编码..但我不知道为什么我不能这样做,我用'PostQuitMessage' ... – jyz 2010-10-06 20:26:13