Я строю программу сборки Windows без какого-либо макроса. Поэтому я загрузил программу, использующую макросы, и я конвертирую ее в «чистый» код сборки.Windows Assembly Doubt - 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 32bits SP3 английский), но для DefWindowProc
компилирует, но он ломается при выполнении. Кто-нибудь знает, почему?
Спасибо за поддержку.
PS .: Я использую masm32
Почему «без каких-либо макросов»? – Andrey
Почему? Две причины: 1) Я хочу видеть детали двоичных файлов Windows. 2) Я хочу построить программу сборки внутри программы C. Зачем? Я просто * очень любопытный парень ... – jyz
Адреса жесткого кодирования = нет-нет. –