FASM принудительно выровнять секцию

Тема в разделе "WASM.ASSEMBLER", создана пользователем BenQQQ, 5 мар 2008.

  1. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    Имеется некоторый FASM исходник с объявленным в нем несколькими секциями(код,данные,импорты,релоки).
    Необходимо - вручную задать физическое и виртуальное положение секций(тоесть выровнять их, но сделать это на значение большее чем 8192)
    Как это можно реализовать?
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    BenQQQ
    Путем правки исходиков FASM'a думаю самый простой способ
     
  3. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    KeSqueer, нда...
    а где оные взять то можно?
     
  4. dead_body

    dead_body wasm.ru

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

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    KeSqueer
    Ещё проще и не столь брутально собрать целевой бинарик вручную.
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Виртуально хорошо align выравнивает, физически... увы никак без правки либо сторонних средств
     
  7. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    хм... неужели нет каких либо встроенных средств... может быть тут как-то помогут макросы? дело в том что мне подошла бы к примеру такая схема:
    - между каждой секцией вставить пустую секцию, состоящую из nop-ов
    - с помощью макроса(вопрос: возможно ли это?) задать кол-во nop-ов в секции - такое чтобы следующая секция начиналась по определенному адресу и кол-во nop-ов динамически определялось ассемблером в процессе компилляции
    т.е. сделать так чтобы кол-во nop-ов "само" подстраивалось ассемблером в зависимости от изменений исходного кода "реальных" секции( исходный код стал меньше по размеру - квеличить кол-во nop-ов, исходный код увеличился в размере - уменьшить кол-во nop-ов)
    В результате бы получилась правильная секция релоков импорта и т.д. как реализовать без правки исходников fasm'a?
     
  8. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    не подходит т.к. мне нужна секция релоков, правильная насроенная ассемблером(если собирать вручную то ее придется дополнительно фиксить - короче гемор сплошной)
     
  9. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    еще один вопросик... как в fasm'e задать виртуальное и физическое выравнивание секций - т.е. то выравнивание, за которое в PE заголовке отвечают следующие поля:
    SectionAlignment - виртуальное выравнивание секций в памяти
    FileAlignment - физическое выравнивание секций в файле
    также хочу спросить каковы минимально возможные значения данных полей в PE загловке, чтобы приложение оставалось работоспособным(win 9x не инетересует)?
    З.Ы. выходной формат файла у мну естественно PE
     
  10. dendi

    dendi New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    233
    FileAlignment 0x200, SectionAlignment 0x1000 я думаю
     
  11. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    FASM рулез=)))))))))))))
    Все проблемы решились чтением документации к FASM'у + использование макросов + правка исходников=)))
    Всем спасибо за участие!
     
  12. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    хы... а вот и неверно - щас собрал новую версию fasm'a, пофиксил в коде file alignment и section alignment на 1, и такой файл винда(xp, sp2) запускает нормально и даже не заикается =) прикольно... - тоесть секции стали невыровненными ни в памяти, ни на диске=)
    Интересно такой файл везде запустится?
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    1 1
     
  14. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    задам еще 1 смежный вопрос по fasm'y:
    существует ли такая директива условной сборки, чтобы в макросе можно было прервать компилляцию и заставить компиллятор вернуть ошибку при настплении определенного условия?
    з.ы. в доках что-то не нашел, неужели опять в исходниках искать(
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Аналог ".ERR" в масме или "#pragma error" в сях? Нету. Но можно что-то типа
    Код (Text):
    1. if failed
    2.  display 'something wrong here' %%L
    3.  __err something wrong ; директивы __err нет, но компиляция прерывается.
    4. end if
     
  16. BenQQQ

    BenQQQ New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2008
    Сообщения:
    44
    IceStudent, спасибо! все получилось =) прямо в яблочко - то что надо ;)))