FASM.компиляция library!

Тема в разделе "WASM.BEGINNERS", создана пользователем VXCoder, 20 дек 2006.

  1. VXCoder

    VXCoder New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2006
    Сообщения:
    41
    Quantum
    С П А С И Б О!!!!!!!!!!!
    Объясни почему именно так???
    Я только начал изучать FASM,Стоит его изучать???Что лучше FASM или Masm???
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    не знаю, у меня не получилось.
    посмотри здесь: http://www.vortex.masmcode.com/files/Scan346.zip
    там есть пара примеров fasm + polink... но это всё равно не то - там не используются объектные файлы от masm-a.
     
  3. opennetworks

    opennetworks New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    436
    Отнюдь! Раздизасми файлы и посмотри
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Beginer01
    Что тебе говорил линкер масма? - Он говорил, что не может найти символ _demo@0. А как он его мог найти, если в фасмовом исходнике этот символ назывался просто demo (без знака подчёркивания в начале и без суффикса @0)? Поэтому решение напрашивается само собой - поменять имя символа на то, которое требует линкер масма. Для этого можно использовать расширенный синтаксис директивы public, которая позволяет "переименовать" символ в обьектнике. Всё это описано в документации. Лучше бы ты спросил почему линкер масма требует символы со столь странными именами. Причиной тому

    demo PROTO

    Т.к. в самом начале исходника указано, что используется соглашение stdcall (см. .model flat, stdcall), PROTO адаптирует имя символа demo под это самое соглашение. stdcall требует, чтобы имена символов начинались со знака подчёркивания и заканчивались суффиксов @X, где X - размер параметров данной функции в байтах. Если параметров нет, как в случае demo, их размер равен нулю. Если параметр только один и имеет 32-битный размер, то суффиксом будет @4, т.е. 4 байта. И т.д. Таким образом, при использовании соглашения stdcall можно по имени символа угадать примерное кол-во параметров в данной функции. Кроме формата имени соглашение stdcall диктует ещё много интересных правил, затрагивающих использование и сохранение регистров общего назначения и т.д. Обо всём этом можно почитать в документации масма.

    Чтобы PROTO не "переименовывал" символ demo в данном случае можно просто явно указать другое соглашение, которое не использует подчёркивания и @X:

    demo PROTO SYSCALL
     
  5. VXCoder

    VXCoder New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2006
    Сообщения:
    41
    shoo
    там не используются объектные файлы от masm-a
    объектные файлы от Fasm-a
    %папка в которой установленный Fasm%\Examples\MSCOFF\MSCOFF.obj
    make library:
    masm32\bin\lib MSCOFF.obj /out:MSCOFF.lib
    link example file:
    \masm32\bin\ml /c /coff "test.asm"
    \masm32\bin\Link /SUBSYSTEM:WINDOWS "test.obj"

    Делаем library на Fasm-e & подключаем к Masm-y
     
  6. VXCoder

    VXCoder New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2006
    Сообщения:
    41
    Quantum
    Еще раз спасибо!Я только начал изучать FASM,Стоит его изучать???
    opennetworks
    Ok!
     
  7. opennetworks

    opennetworks New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    436
    Да.
     
  8. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Beginer01
    я не видел ответа Quantuma, когда постил. "там не используется" я имел в виду примеры к scan.
     
  9. VXCoder

    VXCoder New Member

    Публикаций:
    0
    Регистрация:
    16 ноя 2006
    Сообщения:
    41
    shoo
    Ok