User Tag List

Показано с 1 по 10 из 55

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10

    Регистрация
    31.03.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    33
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    12 сообщений
    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. Причина: добавил картинку

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

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

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

Похожие темы

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

Ваши права

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