Блоки .IF в FASM

Тема в разделе "WASM.ASSEMBLER", создана пользователем Vasil, 7 май 2006.

  1. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Честно говоря, не знал куда засунуть эту тему...



    Вот решил постепенно, точнее - постараться сразу, перейти от MASM к FASM. Подумал я, FASM - вещь. Но наткнулся на такую проблему, от которой я упал!!!



    1. В FASM нет обычной замены:

    ; .IF eax <> 0

    ; test eax, eax

    ; jz _ENDIF

    ; В MASM'e и то продумали дурацкий or eax, eax :)

    2. В масме я использовал верхний регистр, а не нижний:

    ; .IF .ELSEIF .ELSE .ENDIF .WHILE .REPEAT .........



    В итоге вот что получилось (см. аттач)...

    Буду очень признателен тем, кто найдёт какой-нить косяк :)

    Меня пока смущает 14 строчек нач. с 451-ой.



    ЗЫ: Если такая тема где-нить есть, то укажите плиз, сразу не увидишь :) А если эта тема устарела, то разумно будет, продолжить эту ;)



    [​IMG] _750674853__IF.rar
     
  2. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Шчьёрт побьери!!! Подстава...

    Совсем забыл, можно же так:

    ; .IF eax

    ;

    ; .ENDIF



    Простите, сразу не заметил :)
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Vasil

    В исходники глянь там один проектик на фасме вообще тебя либо в шок, либов в восхищение повергнет
     
  4. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    FASM - оправдывает своё название "плоский", прям как в юморе: "Плоские шутки" :)
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    flat - "плоский" в смысле "прямой, ясный, определённый"

    PS: ИМХО - использование в ассемблере всякого рода .IF и иже с ним это нонсенс - жалкое и никчемное подобие HLL, прям AsmBasic какой-то :)))
     
  6. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    leo

    Ты будешь прав, если создавать маленькие проектики.

    Если так рассуждать, то зачем нам директивы invoke или stdcall...



    Согласись, что каждый делает по-своему ;)
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Не соглашусь, т.к. обычный invoke это простой и понятный макрос - известная последовательность команд push и call. А вот "необычный" масмовский invoke позволяет передавать в него непосредственно строку литералов типа "Hello, world!", что в результате превращается в какую-то отсебятину, поэтому я такой фигней никогда не пользуюсь

    А вот что дает .IF я вообще не понимаю
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Vasil



    IF/ENDIF в фасме имеют бало смысла, т.к. не позволяют писать

    так
    Код (Text):
    1. .if (al>="0" && al<="9") || (al>="A" && al<="F") || (al>="a" && al<="f") || al==VK_BACK


    или так
    Код (Text):
    1. .IF ($invoke(GetProcAddress, $invoke(GetModuleHandle, OFFSET szKernel32), $CTA0("D\*ebugActiveProcessStop")))
     
  9. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Впринципе, макросы полезны только тогда, когда ты полностью понимаешь какой они дают код. С invoke то тут все понятно, его можно юзать, А вот всякие .IF я бы юзать не стал, т.к. привык писать без них, и не понимаю что эти ифы генерят.
     
  10. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    leo





    ну обилие cmp eax,eax/je ... и test eax,eax/jz ... будут захламлять код


    Код (Text):
    1. .IF (BYTE PTR [esi]) == bl
    2.    .IF ($invoke(CheckSignature, $invoke(GetCurrentProcess), OFFSET szKernel32, OFFSET szIsDebuggerPresent, OFFSET IsDebuggerPresentSignature, 14))
    3.       inc BYTE PTR [edi]
    4.       inc ebp
    5.    .ELSE
    6.       invoke ErrorToLog, $CTA0(" \[Failed to apply protection against I\*sDebuggerPresent\]")
    7.    .ENDIF
    8. .ENDIF
     
  11. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Если я пишу программы, единственный макрос, который я позволяю - struct. На мой взгляд, invoke не ускоряет существенно процесс написания программа и не делает её удобочитаемой (я привык видеть так, как в отладчике). И пусть большой проект занимает 500 и более Кб, мне всё равно. Главное, что push и call намного понятнее и удобнее для меня. Тем более что я люблю обнулять eax и затем push eax.

    Asterix

    Фигня это, читается как программа на ЯВУ. Вы мне как в классическом OllyDbg и SoftIce подавайте, а не свои грёбаные макросы ставьте. Все эти .IF,.ELSE,.ENDIF - всё лишь от лени. А я её не считаю двигателем прогресса, мне вообще свойственно писать программы, которые какой-то группе людей (например, разработчикам защит ПО) усложнят жизнь. Пока что позволяю SoftIce иметь всех вподряд, так как user-mode отладчик мне не удобен (у него GUI и извратные, идущие от Microsoft способы).
     
  12. Nata

    Nata New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2006
    Сообщения:
    41
    В версии Fasm 1.65.19 можно допустим писать так:

    @:

    .if (al>="0" & al<="9") | (al>="A" & al<="F") | (al>="a" & al<="f")

    inc esi

    loop @

    .endif

    бла...бла..бла..
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Nata

    синтаксис | вместо || и & вместо && и <> вместо != роднит фасм с убогим VB или паскалем
     
  14. Nata

    Nata New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2006
    Сообщения:
    41
    И чем те синтаксис не нравится!Было || стало |.Смысл то не меняется!Так даже лучше!Впрочем на вкус и цвет.......Не хочеш писать на макросах то не пиши!
     
  15. dead_body

    dead_body wasm.ru

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




    это пока так нельзя. фасм на месте не стоит. Щас выйдет версия под Мас, потом версия с debug output, при этом будут происходить задокументирование всех фич.

    Потом когда всё это будет закончено, в версии 1.68 будут нововедения наверное...

    Главное надееться и верить, что Томасу это всё не надоест :).
     
  16. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Все говорят, что у fasm'a истинно правильный синтаксис, но, когда я увидел такую строку:

    invoke MessageBox,0,_message,_caption,0

    я был повергнут в ШОК. Какой-же это нах%р правильный синтаксис, когда в стек помещается не адрес строки, а сама строка (грубо говоря)!
     
  17. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Что тебе не нравится? Если пишется

    mov eax,<переменная>

    то кладётся адрес этой переменной, а

    если

    mov eax,[<переменная>]

    то кладётся значение по этому адресу. И всё удобно. И забудь ты ЯВУ, нах он нужен.
     
  18. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    dead_body



    Где об этом можно почитать? Надо полагать, что эта версия не будет поддерживать PPC? Чем она тогда будет отличаться от линуксовой версии?



    Случайно обнаружил, что PureBasic использует фасм для компиляции кода :)
     
  19. IceStudent

    IceStudent Active Member

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

    Это всего лишь макросы, использовать их тебя никто не заставляет. Это первое. Под правильным синтаксисом имелся ввиду синтаксис ассемблера. Это второе. И не ругайся - это третье.
     
  20. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Программу, написанную с использованием .if(a >='0' || a<='9'), invoke(invoke(...),"xxx"), трудно назвать написанной на языке ассемблера. Даже не задумываясь об оптимизации, сам ты напишешь код куда лутьше, чем сделает это компилятор. Чем она лутьше программы, написанной на си, в смысле полного понимания её работы? В ней нет той гибкости, изящества и силы языка Ассемблера. Лично я предпочитаю знать: где, что и когда. А макросы использую только свои (для построения сложных структур данных), и простые стандартные.