asm+api (part 2)

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

asm+api (part 2)

Сообщение SLIM » 03.06.2011 (Пт) 20:49

Продолжается познавание asm.
Пишу виндовое приложения с помощью FASM
Окно создал - все ок.
Пытаюсь создать кнопку в обработчике WM_CREATE, не получается, зато получается ровно с тем же кодом не в обработчике. Почему не понимаю. Код:
Код: Выделить всё
invoke CreateWindowEx, 0, szClassButton, szTitleButtonCreateFile, WS_VISIBLE or WS_CHILDWINDOW, 10, 10, 110, 40, [Win], 0, [hInst], 0     


Ну да ладно.
Дальше интересно

Код: Выделить всё
proc WinProc, hwnd, wmsg, wparam, lparam
.if [wmsg]=WM_DESTROY
    invoke PostQuitMessage,0
.elseif [wmsg]=WM_CREATE
   invoke CreateWindowEx, 0, szClassButton, szTitleButtonCreateFile, WS_VISIBLE or WS_CHILDWINDOW, 10, 10, 110, 40, [Win], 0, [hInst], 0
   mov [WinButtonCreateFile],eax
.elseif [wmsg]=WM_COMMAND
        .if [lparam]=WinButtonCreateFile
            invoke  MessageBox, [Win],"Click", "Caption Click",MB_ICONASTERISK
        .endif
.else
        invoke DefWindowProc, [hwnd], [wmsg], [wparam], [lparam]
.endif
ret
endp


Вот сообщение "Click" не появляется хоть убей.
Отладить мозгов не хватает толком. Не могу попасть в оконную процедуру, а в самом FASM-е отладчика нет.

Click-ните мне в лоб что я опять где-то лоханулся плиз

[Хакер] :: И ведь, хоть новые разделы и созданы, главный просильщик продолжает постить не в тот раздел. Переношу.
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: asm+api (part 2)

Сообщение Хакер » 04.06.2011 (Сб) 11:29

SLIM писал(а):Продолжается познавание asm.

Да какое там познавание ассемблера. invoke,proc...endp, .if a = b....else....endif.

Это изучение безымянного макрояззыка, а не изучение ассемблера. И вот, хоть всё это макробесие (sic!) и хорошо, чтобы выучить, нужно сначала выучить нормальный голый ассемблер, вызывая инструкцией call, а не обёрткой invoke, и сравнения делая инструкциями cmp...jxx, а не обёрткой if с макрооператором «равно».

[WinButtonCreateFile]

Выиграй кнопку, создай файл!
Удивительное название для ячейки памяти, в которой хранится хендл окна. Обфускаторы отдыхают.

SLIM писал(а):Click-ните мне в лоб что я опять где-то лоханулся плиз

Тут и кликать не нужно, видно невооруженным глазом.
При создании хендл записывается в ячейку по адресу WinButtonCreateFile, при получении WM_COMMAND хендл сравнивается с адресом WinButtonCreateFile.

Было бы на Си, было бы так:
Код: Выделить всё
*WinButtonCreateFile = CreateWindow(...);
...
if(WinButtonCreateFile == hwnd) ...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: asm+api (part 2)

Сообщение SLIM » 05.06.2011 (Вс) 11:23

Хакер писал(а):Да какое там познавание ассемблера. invoke,proc...endp, .if a = b....else....endif.

Это изучение безымянного макрояззыка, а не изучение ассемблера. И вот, хоть всё это макробесие (sic!) и хорошо, чтобы выучить, нужно сначала выучить нормальный голый ассемблер, вызывая инструкцией call, а не обёрткой invoke, и сравнения делая инструкциями cmp...jxx, а не обёрткой if с макрооператором «равно».


Ну я знаю как сделать то же самое без макросов. Просто с макросами удобнее и удобочитаемее.
Хакер писал(а):При создании хендл записывается в ячейку по адресу WinButtonCreateFile, при получении WM_COMMAND хендл сравнивается с адресом WinButtonCreateFile.

Спасибо :)
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList