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