Сам себе Iczelion

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl_, 11 май 2007.

Метки:
  1. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    насчет часиков можно было WM_SIZE обработать :)
     
  2. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Mikl__, спасибо, очень интересно.
    Только одно "но":
    Код (Text):
    1. jmp short a1
    2. ...
    3. a1: ret
    Для чего это?
     
  3. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    По умолчанию почти все ассемблеры (кроме NASM, YASM) создают код двухбайтного jmp если метка лежит на растоянии -128/+127 байт, если растояние длинее - формируется 5 байтовый код jmp. При использовании short и при появлении сообщений, что данная метка находится на растоянии более +127/-128 байт - это сигнал автору пересмотреть алгоритм или расположение меток - короче, один из способов писать более короткий код:)
     
  4. Shoorup

    Shoorup New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Только сейчас заметил тему! Mikl__ на самом деле очень интересно и полезно всё что ты написал! (хоть половину и не понял:) )
    Mikl__ единственное не пойму... зачем тебе переписывать уроки Iczelionа? Помоему ты пишешь ничуть не хуже. Попробуй написать цикл статей (уроков) для начинающих, наподобие Iczelionа. Если есть у тебя желание и время набери новичков в асме (например таких как я;) ) и пиши урок. Потом эту статью читают новички. Каждый говорит что не понятно. Ну и затем статья правиться так, пока все моменты для понимания урока не будут учтены. Как мне кажется это наиболее правильный и успешный путь написания статьи. Например уроки Iczelionа мне не все понятны... приходится копать глубже в дополнительной литературе, которая конечно же не указана в уроке. А не понятны они по большей части потому, что автор при написании не учел знает ли новичок (ученик) определенный момент или пункт в статье, необходимый для понимания всего урока.
     
  5. latent

    latent New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    12
    тоже почитал бы )
    если бы еще под nasm под который инфы почти нет - вообще волшебно :)
     
  6. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Это понятно.
    Только вот думаю: почему бы на месте
    Код (Text):
    1. jmp short a1
    сразу не написать
    Код (Text):
    1. ret
     
  7. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Mikl__, а разве в уроке №5 всё окно должно быть синим, или только надпись 400x20 ?
     
  8. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    AssemblerIA64 1) Да, окно я намеренно закрасил синим
    2) То что касается замены jmp short a1 -> на ret в данном случае ret не 0C3h а макрос, который в коде программы разворачивается в
    Код (Text):
    1. С9 (leave)
    2. C21000 (retn 10h)
    3. ; поэтому заменять двухбайтовый jmp short на четырехбайтовый leave/retn 10h
    4. ; я посчитал нецелесообразным
    Shoorup, latent
    В принципе заканчиваю перевод уроков Iczelionа на GoAsm, FASM, NASM, YASM, WASM, lzasm но это не уроки а "вариации на тему" -- поэтому пишите в эту тему, о чем бы хотелось
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Mikl__
    А для WASM большие отличия?
     
  10. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Mikl__, мне кажется, стоит переписать примеры с диалогами:
    одной-единственной кнопки явно недостаточно, диалог ведь подразумевает навигацию по контролам.
    Кстати, у Iczelion-а с диалогами прокол на проколе, постарайтесь не повторить :)
     
  11. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    _basmp_ от masm отличает то что в masm call _imp__proc а в wasm call __imp__proc
    самый удивительный синтаксис у GoAsm например dec eax,ebx развернется в dec eax/dec ebx , при джампах необходимо указывать jz >метка (короткий переход к метке вперед) или jz <<метка (дальний переход к метке назад)
     
  12. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Mikl__, то есть в wParam - дескриптор на контекст окна?
    Код (Text):
    1. @@WM_CTLCOLORSTATIC: push 32C8C8h
    2.         push wParam
    3.     call _imp__SetTextColor@8
    4.     push 0FF0000h
    5.     push wParam
    6.     call _imp__SetBkColor@8
    7.     push NULL_BRUSH
    8.     call _imp__GetStockObject@4
     
  13. Shoorup

    Shoorup New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Mikl__
    хотелось бы нормальную статью про PE и про то как можно выкинуть ненужное в файле.
     
  14. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Mikl__, тогда зачем:
    Код (Text):
    1. ;WNDCLASSA -----------------------------------------------
    2.     ...
    3.     hbrBackground   dd COLOR_BTNFACE+1;Фон нашего окна
    4.     ...
    5. ;----------------------------------------------------------
    ?
     
  15. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    В первых строчках
    Код (Text):
    1.     push 0FF0000h
    2.     call _imp__CreateSolidBrush@4
    3.     mov [edi].hbrBackground,eax
    Цвет всего окна определяется, как синий. Строка
    Код (Text):
    1. ;WNDCLASSA -----------------------------------------------
    2.     ...
    3.     hbrBackground   dd COLOR_BTNFACE+1;Фон нашего окна
    это останки от предыдущего шаблона, правильнее конечно "hbrBackground dd ?"
    Надпись выводится как STATIC, поэтому цвет текста и фона под ним определен в
    Код (Text):
    1. @@WM_CTLCOLORSTATIC: push 32C8C8h
    2.         push wParam
    3.     call _imp__SetTextColor@8
    4.     push 0FF0000h
    5.     push wParam
    6.     call _imp__SetBkColor@8
    7.     push NULL_BRUSH
    8.     call _imp__GetStockObject@4
    9. a1: ret
     
  16. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Mikl__, спасибо.
    Просто я пропустил что-то первые строчки.
     
  17. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Mikl__, может в уроке №5 WndProc написать лучше так:
    Код (Text):
    1.  
    2. ; ------------ [Procedure WndProc] ------------------------------------------------
    3. ;  Обработка сообщений, посылаемых Windows нашему приложению
    4. ; ---------------------------------------------------------------------------------
    5.  WndProc:
    6.     cmp dword ptr [esp+8], WM_DESTROY
    7.     je  @@Destroy
    8.     cmp dword ptr [esp+8], WM_CTLCOLORSTATIC
    9.     je  @@CtlColorStatic    
    10.  
    11.     jmp _imp__DefWindowProcA@16
    12.  
    13.  ; ---- [обработка WM_DESTROY] --------------------
    14.  @@Destroy:
    15.     push    0
    16.     call    _imp__PostQuitMessage@4
    17.     ret 10h
    18.  
    19.  ; ---- [обработка WM_CTLCOLORSTATIC] ------------
    20.  @@CtlColorStatic:
    21.     push    0F37B0h             ; Кирпичный цвет текста
    22.     push    dword ptr [esp+16]
    23.     call    _imp__SetTextColor@8
    24.     push    0FF0000h                ; Синий фон
    25.     push    dword ptr [esp+16]
    26.     call    _imp__SetBkColor@8
    27.     push    NULL_BRUSH          ; Пустая кисточка
    28.     call    _imp__GetStockObject@4
    29.     ret 10h
     
  18. ________

    ________ Дзынь Дзынь Дзэ Линь

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    24
    Адрес:
    GetAllocPlace{x,y,z}
    Mikl__
    Что-то этот ехе не работает у меня.Отладчик ollydbg говорит что неизвестный формат.
     
  19. ________

    ________ Дзынь Дзынь Дзэ Линь

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    24
    Адрес:
    GetAllocPlace{x,y,z}
    Троян
     
  20. ________

    ________ Дзынь Дзынь Дзэ Линь

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    24
    Адрес:
    GetAllocPlace{x,y,z}
    Троян в первом посте.Экзешник потом исчезает.