Небольшие уточнения по FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Rito, 22 июн 2008.

  1. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Решил я не ограничиваться MASM и попробовать знаменитый FASM. Но возникли, даже не проблемы, не понятки с ним.
    Читаю уроки Iczelion'а переписанные для fasm.
    1. Зачем обязательно делать секцию импорта. В примерах от архива самого fasm тоже самое. Везде создаётся секция. В masm не делал такого. Этого ж лишнее только писать.
    2. Почему в уроке 2 используется win32ax.inc, а уже в 3 win32a.inc, в то время как win32ax.inc включает в себя и win32a.inc. Если же подключить в 3 уроке win32ax.inc, то программа не комиплируется
     
  2. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    1. Подключай сразу прописанный импорт WIN32AX.inc

    Уроки Iczelion'а есть и на FASM.
     
  3. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    Потому как FASM более низкоуровнен и тем и крут. Потом поймешь его преимущества.
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Вовсе не обязательно если импорт не используется ;)
    Вручную, так же, вовсе не обязательно создавать импорт, указываюя каждую функцию, можно например так:
    Код (Text):
    1. section '.idata' import data readable
    2. library kernel32,'kernel32.dll',\
    3.         user32, 'user32.dll',\
    4.         gdi32,     'gdi32.dll' ,\
    5.         comctl32,'comctl32.dll',\
    6.         comdlg32,'comdlg32.dll',\
    7.         wsock32,'ws2_32.dll',\
    8.         msvcrt,'msvcrt.dll'
    9.  
    10. include '%fasminc%\apia\kernel32.inc'
    11. include '%fasminc%\apia\user32.inc'
    12. include '%fasminc%\apia\comctl32.inc'
    13. include '%fasminc%\apia\comdlg32.inc'
    14. include '%fasminc%\apia\gdi32.inc'
    15. include '%fasminc%\apia\wsock32.inc'
    16. include '%fasminc%\msvcrt.inc'
    В этом случае сам Fasm оставит только те API, которые используются.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Rito
    Не понятно, что тебя не устраивает
    Если ты не хочешь создавать таблицу импорта "ручками", то юзай win32ax и секция импорта будет создана автоматом директивой .end start
    Если же тебя не устраивает, что под импорт создается отдельная секция, то можно или подправить win32ax (закоментировать в макросе .end строку section и заключить весь импорт в data import .. end data) или не юзать .end и создавать таблицу "ручками" в конце секции кода (если "в лом" каждый раз копипастить всю таблицу, можно создать свой inc и подключать его одной строчкой)
     
  6. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    А есть для фасма редактор, наподобии радасма?
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    я когда-то их смотрел - мне показалось, что переписали их не очень удачно. да и не очень-то они и нужны, если пройдены под масмом.

    при переходе с масма на фасм нужно знать:

    1.основные отличия синтаксиса - например, адресация при обращении к памяти, int3 вместо int 3, и т.п. мелочи.

    2.особенности высокоуровневых операторов, аналогичных тем, что в масме, но реализованных через макросы:
    - в масме: invoke, в фасме: invoke, cinvoke, stdcall и ccall (т.к. нет "PROTO" - тип вызова задается явно; наиболее частый облом - wsprintf нужно вызывать с cinvoke)

    3.разница между win32*.inc - win32a.inc - базовый, win32ax.inc - расширенная поддержка высокоуровневых слов, аналогичных масму (но все равно имеющих отличие в синтаксисе) типа .if и т.п., win32axp.inc - то же, что и win32ax.inc, но проверяющие количество параметров для invoke - иногда удобно, иногда наоборот.

    4.секция импорта: можно написать ручками, можно использовать "тотальный" импорт (который не покрывает все библиотеки), можно использовать автоматический сканер импорта от Vortex-а, который сканирует исходник и формирует таблицу иморта сам (не лишен недостатков, но они обходятся).

    5.ресурсы: можно использовать rc-файлы, компилировать в res и из них создавать секцию ресурсов, можно писать ручками, можно использовать смешанный способ: писать ручками все, кроме диалогов, а диалоги конвертировать из rc в формат фасма и инклидить. некоторые вещи фасм не позволяет, например, идентификаторы в ресурсах, написанных ручками, могут быть только числовыми (по-моему). при использовании кириллицы в ресурсах фасма нужно не забывать подключать "encoding\win1251.inc".

    6.многое из того, что есть нудным и рутинным, можно автоматизировать, используя, например, WinAsm Studio с надстройкой FASM, которое можно скачать здесь с русской справкой.
     
  8. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    Rito
    Дело в том, что масм на выходе создает не exe, а obj. А затем этот obj линкуется линкером вместе с либами. Таблицу импорта, как и заголовок, строит линкер а не масм.

    С фасмом дело обстоит не так. Ему по барабану что создавать, он выведет в файл то, что ты ему скажешь. Иными словами программа на фасме выглядит вот так:

    FORMAT PE CONSOLE - хочу чтобы файл начинался с mz - pe заголовока
    Entry Main - Хочу чтобы точкой входа была Main

    proc Main - Тута моя программа

    ret
    endp

    SECTION '.idata' import data readable writeable - Хочу чтобы все это заканчивалось таблицей импорта

    Фасму по барабану что пихать в файл. Что ты ему сказал то он и запихнул. Просто в данном случае последовательность запихнутых байт будет соответствовать exe файлу.

    Отличия от Масма заключаются только в этом. Ты можешь не создавать exe файлы напрямую фасмом, а создавать obj файлы как масм, в мануале фасма описано как это делать. А затем кормить эти файлы какому-нибудь линкеру. Так тебе не придется создавать таблицу импорта вручную за тебя сделает это линкер.
     
  9. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    В дополнение к этим словам сайт www.256b.com
    там, на фасме и других интструментах, создают демки, но занимательней всего файлы различных форматов, например фрактал в BMP можно сгенерировать на фасме :)
     
  10. n1kt0

    n1kt0 Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2007
    Сообщения:
    160
    кинь линк в пм плс на уроки под фасм!
     
  11. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    n1kt0
    http://ifolder.ru/1478334
     
  12. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    А есть по фасму какойнить русский хелп?
     
  13. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    2FED
    http://www.wasm.ru/baixado.php?mode=doc&id=133
    Еще также была дока S.T.A.S или переводил или сам писал, сайт его не помню
     
  14. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    jCronuz Спасибо, вот теперь можно братся за изучение ;)
     
  15. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    TAJGA FASM Tutorial
    http://mythrillus.land.ru/tajga-tut/index.html
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494