Важная информация

User Tag List

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 21 по 30 из 55

Тема: Ассемблер под Windows глазами Спектрумиста

  1. #21
    Junior
    Регистрация
    31.03.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    20
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот зря не почитали самую последнюю страницу. То что я выложил, это маленькая demo-версия 0.1. Планируемая книга состоит из 11 частей. объем более 600 страниц.

    в 5-й части, которую я сейчас выложил сырую как раз даны примеры вывода фактически всех объектов с нуля на рабочий стол. только она более 100 страниц.

    В 6-й части разобраны окна RegisterClassEx, DialogBoxIndirectParam, CreateDialogIndirectParam и их схемы работы, согласно ollydbg
    В 7-й части рассмотрено многослойное классическое программирование на подложку из окон, рассмотренных в 6-й части
    В 8-й части будет рассмотрена работа в программе по прерыванию, которую вызывает Windows, особенности сообщений, раскраска элементов
    В 9-й части нестандартный подход по работе с памятью, dll, запись данных
    В 10-й части Демосцена из объектов Windows (сложные примеры программ).
    В 11-й части ручная лепка .exe файлов, компиляция через .com, ручное создание ресурсов.

    По случаю последних событий, выкладываю обновление v0.2, в которую вошла 5 глава. Она сырая, почти без комментариев, с одними примерами. В ней как раз объясняется создание всех известных объектов и это еще не дошел до обычных окон, с которых начинается знакомство. Размер новой версии увеличился более чем на 100 страниц.
    Кроме того добавил обложку, исправил предисловие и поставил предупреждение о том, что мнение автора может не совпадать с мнением окружающих.

    https://drive.google.com/open?id=0B8...lNTMEpCbDg1MjQ



    Учтите, это не быстрое дело. Программы фактически все готовы, но нужно тестировать, верстать и приводить в порядок. На это может уйти год.

    - - - Добавлено - - -

    Меню, таблицы горячих клавиш и диалоговые окна без ресурсов делаются элементарно, моим "Рабоче-крестьянским" ассемблером:

    Первое окно:

    ; Цветное окно DialogBoxIndirectParam со значком (C) EuroYura 2017

    .686p
    .model flat

    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\gdi32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib

    .code
    nachalo: MOV EBX, OFFSET nachalo-180h
    PUSH 0
    CALL GetModuleHandle
    MOV ESI, EAX

    ; Построение массива данных в памяти с нужными значениями для создания диалогового окна

    MOV DWORD PTR [EBX+20h], WS_OVERLAPPEDWINDOW
    MOV DWORD PTR [EBX+24h], WS_EX_CLIENTEDGE
    MOV WORD PTR [EBX+28h], 0
    MOV WORD PTR [EBX+2Ah], 150
    MOV WORD PTR [EBX+2Ch], 100
    MOV WORD PTR [EBX+2Eh], 300
    MOV WORD PTR [EBX+30h], 200
    MOV WORD PTR [EBX+32h], 0
    MOV WORD PTR [EBX+34h], 0

    ; Перенос текста заголовка в массив с переводом в UNICODE

    PUSH OFFSET Zagolowok
    CALL lstrlen

    PUSH EAX
    PUSH EBX
    ADD DWORD PTR [ESP],36h
    PUSH -1
    PUSH OFFSET Zagolowok
    PUSH MB_PRECOMPOSED
    PUSH CP_ACP
    CALL MultiByteToWideChar

    ; Создание диалогового окна

    PUSH 0
    PUSH OFFSET IzolProgr
    PUSH 0
    PUSH EBX
    ADD DWORD PTR [ESP],20h
    PUSH ESI
    CALL DialogBoxIndirectParam

    RET

    ; Изолированная сигналоприемная программа, в которую компьютер входит сразу после создания окна

    IzolProgr: MOV EBP, ESP
    CMP DWORD PTR [ESP+8], WM_INITDIALOG
    JE Znachok

    CMP DWORD PTR [ESP+8], WM_CTLCOLORDLG
    JE CwetOkna

    CMP DWORD PTR [ESP+8], WM_CLOSE
    JE Wyhod

    MOV EAX, 0
    RET

    ; Установка цвета фона окна

    CwetOkna: PUSH 0080FFh
    CALL CreateSolidBrush
    RET

    ; Установка значка в окно

    Znachok: PUSH IDI_EXCLAMATION
    PUSH 0
    CALL LoadIcon

    PUSH EAX
    PUSH ICON_BIG
    PUSH WM_SETICON
    PUSH [EBP+4]
    CALL SendMessage
    RET

    ; Выход из программы изолированного цикла

    Wyhod: PUSH 0
    PUSH [EBP+4]
    CALL EndDialog
    RET

    Zagolowok db "Цветное 0кно DialogBoxIndirectParam",0
    end nachalo

    Компиляция:

    c:\masm32\bin\ml /c /Cp /Gz /coff 70.asm
    c:\masm32\bin\link /SUBSYSTEM:WINDOWS /ALIGN:1024 70.obj
    pause


    Другой тип диалогового окна CreateDialogIndirectParam:

    ; Простейшее окно CreateDialogIndirectParam с классической постройкой массива (C) EuroYura 2016

    .686p
    .model flat

    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\gdi32.inc

    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib

    .code
    nachalo: MOV EBX, OFFSET nachalo-180h
    PUSH 0
    CALL GetModuleHandle
    MOV ESI, EAX

    ; Построение массива данных в памяти с нужными значениями для создания диалогового окна

    MOV DWORD PTR [EBX+20h], WS_VISIBLE+WS_OVERLAPPEDWINDOW
    MOV DWORD PTR [EBX+24h], WS_EX_CLIENTEDGE
    MOV WORD PTR [EBX+28h], 0
    MOV WORD PTR [EBX+2Ah], 150
    MOV WORD PTR [EBX+2Ch], 100
    MOV WORD PTR [EBX+2Eh], 300
    MOV WORD PTR [EBX+30h], 200
    MOV WORD PTR [EBX+32h], 0
    MOV WORD PTR [EBX+34h], 0

    ; Перенос текста заголовка в массив с переводом в UNICODE

    PUSH OFFSET Zagolowok
    CALL lstrlen

    PUSH EAX
    PUSH EBX
    ADD DWORD PTR [ESP],36h
    PUSH -1
    PUSH OFFSET Zagolowok
    PUSH MB_PRECOMPOSED
    PUSH CP_ACP
    CALL MultiByteToWideChar

    ; Создание диалогового окна

    PUSH 0
    PUSH OFFSET IzolProgr
    PUSH 0
    PUSH EBX
    ADD DWORD PTR [ESP],20h
    PUSH ESI
    CALL CreateDialogIndirectParam
    MOV EDI, EAX

    ; Цикл повседневной жизни старения и утилизации окна после его смерти (закрытия окна)

    ViznxOkna: PUSH 0
    PUSH 0
    PUSH 0
    PUSH EBX
    CALL GetMessage

    CMP EAX, 0
    JE SmertxOkna

    PUSH EBX
    PUSH EDI
    CALL IsDialogMessage

    CMP EAX, 0
    JNE ViznxOkna

    PUSH EBX
    CALL DispatchMessage
    JMP ViznxOkna

    SmertxOkna: RET

    ; Изолированная сигналоприемная программа, в которую компьютер входит после входа в подпрограмму создания окна

    IzolProgr: MOV EBP, ESP
    CMP DWORD PTR [ESP+8], WM_INITDIALOG
    JE Znachok

    CMP DWORD PTR [ESP+8], WM_CTLCOLORDLG
    JE CwetOkna

    CMP DWORD PTR [ESP+8], WM_CLOSE
    JE Wyhod

    MOV EAX, 0
    RET

    Znachok: PUSH IDI_QUESTION
    PUSH 0
    CALL LoadIcon

    PUSH EAX
    PUSH ICON_BIG
    PUSH WM_SETICON
    PUSH [EBP+4]
    CALL SendMessage
    RET

    CwetOkna: PUSH 0FF0080h
    CALL CreateSolidBrush
    RET

    Wyhod: PUSH 0
    CALL PostQuitMessage

    MOV EAX, 0
    RET

    Zagolowok db "Цветное окно CreateDialogIndirectParam",0
    end nachalo

    Компиляция:

    c:\masm32\bin\ml /c /Cp /Gz /coff 72.asm
    c:\masm32\bin\link /SUBSYSTEM:WINDOWS /ALIGN:1024 72.obj
    pause
    Последний раз редактировалось Yuri80; 11.04.2017 в 15:59. Причина: добавил картинку

  2. #22
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Yuri80 Посмотреть сообщение
    ; Перенос текста заголовка в массив с переводом в UNICODE
    поясните, ЗАЧЕМ ЭТО?

  3. #23
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    657
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Картинка результат к 23.asm не та что нужно
    крест в красном кружке и 2 кнопки повтор и отмена явно не PUSH MB_YESNOCANCEL+MB_ICONQUESTION

    пример 24a.asm
    Для разнообразия убрана кнопка «Справка» из окна.
    но в 24.asm тоже не было справки...

    да и в paint-e у меня нету справки...
    но 24 и 24а идентичны по настройке окна
    Последний раз редактировалось NEO SPECTRUMAN; 12.04.2017 в 22:56.

  4. #24
    Junior
    Регистрация
    31.03.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    20
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо за поправки! Совершенно верно! Торопился, когда верстал pdf из word и вырезал фрагменты книжки из черновика. Все исправил у себя на будущее. Картинка 46 должна быть такая:

    http://savepic.net/9215241.jpg

    В 24.asm к строчке MOV DWORD PTR [EBX+14h], CC_FULLOPEN+CC_RGBINIT
    нужно в конец прибавить +CC_SHOWHELP и будет справка как на картинке
    Последний раз редактировалось Yuri80; 13.04.2017 в 14:00. Причина: добавил пояснения

  5. #25
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    657
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    31.asm не завершается корректно по нажатию на крестек
    и продолжает висеть в процессах

    ага так и надо ОК

    да и названия меток в нем какието очепятковостранные...
    Последний раз редактировалось NEO SPECTRUMAN; 13.04.2017 в 18:12.

  6. #26
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    657
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    поясните, ЗАЧЕМ ЭТО?
    почетал еще в некоторых местах...

    и о боже они хранят строки в одном
    потом их конвертят в другое
    а потом их выводят....


    а этот MарASM не умеет конвертить строки...

    ПЦ такой ПЦ ^2

  7. #27
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    насколько мне известно, Flat Assembler поддерживает Unicode
    в TASM'e я извращался похуже:
    Код:
    encoder_1:;"image/jpeg"
     db  69h ; i
     db    0
     db  6Dh ; m
     db    0
     db  61h ; a
     db    0
     db  67h ; g
     db    0
     db  65h ; e
     db    0
     db  2Fh ; /
     db    0
     db  6Ah ; j
     db    0
     db  70h ; p
     db    0
     db  65h ; e
     db    0
     db  67h ; g
     db    0
     db    0
     db    0
    это для GDI+

    а выше изврат вообще. Автор похоже игнорирует текстовые функции A/W

  8. #28
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    657
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    в TASM'e я извращался похуже:
    Мдя....

    мне сразу приходит в голову
    какая нибудь такая тулза
    https://r12a.github.io/apps/conversion/
    (они обычно прекрасно работают в офлайне)

    и автозамена "пробелов" на запятые в блокноте...
    и сбоку комментарий что написано...

    - - - Добавлено - - -

    Цитата Сообщение от Шынни Посмотреть сообщение
    а выше изврат вообще. Автор похоже игнорирует текстовые функции A/W
    мне понравилось в описании что все равно венда сначала запускает конвертацию а потом уже запускает одну универсальную процедуру...
    Последний раз редактировалось NEO SPECTRUMAN; 15.04.2017 в 21:52.

  9. #29
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    мне понравилось в описании что все равно венда сначала запускает конвертацию а потом уже запускает одну универсальную процедуру...
    профанация.

    reήilenσ eht ni skrőш woи edøcinü :0.2 tëuop

    вот этот уникод в ANSI пусть преобразует.

  10. #30
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    657
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    вот этот уникод в ANSI пусть преобразует.
    с точностью на оборот же
    вот цитата от тудо
    В Win32 есть 2 типа функции заканчивающиеся на A и на W. Всё отличие в строках, которые принимают функции. А-функции принимают ANSI строки. W-функции принимают Unicode строки. У каждой функции, которая принимает строки, есть обе версии. Обычно все пользуются ANSI версиями функций. Но в любом случае при вызове ANSI функции все строки сначала преобразуются в Unicode строки, и будет вызвана Unicode функция.
    не знаю на сколько достоверно...

    - - - Добавлено - - -

    Не понел
    а от куда такая не любовь к invoke?

    оно хоть и не теплое и ламповое
    но вполне понятное и полезное

    мня больше бесят
    REPEAT
    IF
    и ld a,b,f,(hl),100500,c,$70050,(bc),de в спектрумовских асмах
    которые генерируют ассемблерный код...
    Последний раз редактировалось NEO SPECTRUMAN; 15.04.2017 в 23:58.

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Похожие темы

  1. Ответов: 23
    Последнее: 15.02.2017, 20:55
  2. Эмулятор под Windows-7
    от XOUT в разделе Эмуляторы
    Ответов: 20
    Последнее: 04.09.2010, 02:42
  3. Mined Out. Аналоги под Windows?
    от Vitalik в разделе Игры
    Ответов: 10
    Последнее: 30.06.2005, 00:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •