надо ли, кому либо из здесь присутствующих макросы для фасме?

Тема в разделе "WASM.ZEN", создана пользователем dead_body, 22 фев 2006.

  1. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    собсно сабж. Если надо могу взяться за написание. Макросы вида:

    edi = eax

    esi = [edi]

    edx = esi+eax

    byte [edi] = cl

    dword [edx] = ebx

    byte [ebp+20] = '%'

    ecx++

    .for(eax=0/eax<=edx/edx++)

    code

    .endf

    а также в виде более сложных, для работы с памятью,консолью,стеком и другое.(ну а не только изменения синтаксиса).

    сейчас понемногу пишу для себя, но если кому то надо, то тогда начну так сказать "проект" где всё аккуратенько и почучуть. Я привел только пример макросов для изменения синтаксиса, но будут и макросы типа: malloc и mfree и

    также множества других. Главно что макровозможности фасма почти неограничены, и попытаться на нём реализовать можно всё и я думаю всё получиться. Вообщем если кому-то нада постите.
     
  2. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    нужен макрос



    PutText addr, 'text'



    чтобы вышел код



    mov edi, addr

    cld

    mov al, 't'

    stosb

    mov al, 'e'

    stosb

    mov al, 'x'

    stosb

    mov al, 't'

    stosb
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Код (Text):
    1.  
    2. macro PutText addr, text
    3. {
    4.   local len, char
    5.   mov edi, addr
    6.   cld
    7.   virtual at 0
    8.     db text
    9.     len = $
    10.   end virtual
    11.   repeat len
    12.     virtual at 0
    13.       db text
    14.       load char byte from %-1
    15.     end virtual
    16.     mov al, char
    17.     stosb
    18.   end repeat
    19. }
    20.  
    21. PutText 0, 'text'
    22.  
     
  4. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    спасибо! а как заставить препроцессор ксорить?

    например





    xored_string cod, 'text'



    чтоб получилось



    db cod, t xored by cod, e xored by cod,....
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Какой смысл ксорить на константу? :)

    Вот макрос аналогичный первому, но текст ксорится на ключ произвольной длины:
    Код (Text):
    1.  
    2. macro PutXoredText addr, text, xorkey
    3. {
    4.   local len, char, key, keylen
    5.   mov edi, addr
    6.   cld
    7.   virtual at 0
    8.     db text
    9.     len = $
    10.   end virtual
    11.   virtual at 0
    12.     db xorkey
    13.     keylen = $
    14.   end virtual
    15.   repeat len
    16.     virtual at 0
    17.       db text
    18.       load char byte from %-1
    19.     end virtual
    20.     virtual at 0
    21.       db xorkey
    22.       load key byte from (%-1) mod keylen
    23.     end virtual
    24.     mov al, char xor key
    25.     xor al, key
    26.     stosb
    27.   end repeat
    28. }
    29.  
    30. PutXoredText 0, 'text', <0x55, 0xAA, 0x5A>
     
  6. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    круто! а где взять новый тутор по написанию макрей? а то в старом подобная техника не описывалась.
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Прочитать документацию и написать самому?
     
  8. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    хотелось бы доков по макрям с множеством разных экзамплов.

    старый док был оч хорош но таких ситуаций там не описывалось.
     
  9. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    так макросы кому-то надо различные? или нет?
     
  10. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    doctor_Ice

    старый док это какой? в доке by vid есть почти всё + форум фасма.
     
  11. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    а так можно сделать
    Код (Text):
    1. mov eax, macro_crc32(l"Unicode text")
    ?
     
  12. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    dead_body

    старый док это тот что S_T_A_S_переводил.
     
  13. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка


    но макрос такой сделать можно.

    надо переопределить "mov",потом с помощью match доделать всё остальное. как сказал S_T_A_S_ возможности match безграничны...
     
  14. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    doctor_Ice

    "TAJGA FASM Tutorial by vid - FASM preprocessor guide.

    перевёл S.T.A.S. | последняя редакция: 22 июня 2004г" там есть многое + всё что непонял на форум.
     
  15. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    интересно, а можно забацать макрос такого вида:
    Код (Text):
    1. fobject objectname,\
    2.         member5,value5,\
    3.         member3,"value3"


    где objectname - произвольная статическая структура, а данный макрос создает ее экземпляр и заполняет (или не создает, а только заполняет) указанные члены означенными значениями, причем порядок следования параметров может быть иным, чем порядок членов структуры. остальные же члены заполняются нулями, или (лучше, но сложнее) - значениями по умолчанию.
     
  16. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    shoo

    можно, но только я так и не понял доконца, что надо. если можно примерчик, и я попытаюсь написать.
     
  17. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    смысл в следующем:



    традиционный вариант:

    1.описываем структуру objectname

    2.создаем ее инициализированный экземпляр:

    objectname 333,p_proc,0,0,p_text,0,0,0,65

    при этом мы должны:

    - соблюдать порядок параметров аналогично порядку членов структуры

    - инициализировать промежуточные члены, если хотим инициализировать какой-либо из последующих

    - обновлять порядок для экземпляров, если изменилась структура

    а также, если мы это писали более 2-х недель назад, то можем и не вспомнить, что означает 333 или 65.



    этого можно избежать при использовании предложенной формы. я уже размышлял об этом: думаю, тут полезно будет копнуть в сторону load/store, только я не знаю, есть ли возможность получить размерность члена структуры в фасме
     
  18. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine


    тупо:
    Код (Text):
    1.  
    2. fobject RECT,\
    3.         bottom,10,\
    4.         right,50
    - что должно получиться - понятно ;)
     
  19. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    вот тут такой вопрос появился по поводу синтаксиса:

    в масме было вроде так:

    mov var,$invoke GetModuleHandle(0)

    сейчас пытаюсь сделать то же самое для фасма, но немного с более понятным синтаксисом:

    dword <[variable1] = GetModuleHandle(0)>

    dword <[variable1] = MessageBox(0,0,0,0)>

    или сделать что то вроде этого:

    result_of <MessageBox(0,0,0,0) in [variable1]>

    или

    result <MessageBox(0,0,0,0) to [variable1]>



    или может есть что то лучше? но первая записб более эффективна, можно будет писать и:

    byte <[byte_variable] = MessageBox(0,0,0,0)>

    для mov [byte_variable],al



    кто что думает?
     
  20. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    shoo

    думаю получиться. приду после универа запостю макрос.