На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> добавлять только используемый код , masm32, link only use functions
    Есть файл utils.inc, в котором набор функций, он используется в нескольких проектах. В каждом проекте нужны не все функции. Подскажите, пожалуйста, опцию компилятора, чтобы в исполняемый файл каждого из проектов добавлялся только используемый код.
      В masm32 такое сделать заморочно. Нужно либо прописывать макросы типа #ifdef USE_INTTOSTR, а в главных исходниках делать #define USE_INTTOSTR для каждой функции. Естественно, не забывая о зависимостях (когда одна функция использует другую). Либо компилировать каждую функцию в отдельный объектный файл (obj) и объединять их в библиотеку (lib). Тогда при линковке будут добавляться только те объектники, которые используются.
      В fasm такое делается элементарно, там есть if used.
        Значит это был другой ассемблер, помню что где-то была такая возможность, автоматически. Интересно, почему это не реализовано на стадии ассемблирования/линковки. Придётся дублировать один и тот же код на несколько проектов и исправлять если что одно и тоже в нескольких файлах.
        Сообщение отредактировано: kin01 -
          kin01, потому что в ассемблерном коде всё может быть переплетено как угодно. Можно прыгать в функцию, скажем, просто убрав ret в конце первой; брать адреса одних меток и добавлением смещений других входить/брать что-то внутри других функции и пр, пр, пр. В некоторых ассемблерах вообще нет понятия функций, есть просто метки. Да и в masm с помощью proc можно просто разделять блоки кода, а не реальные функции. И т.д.
          В fasm это реализовано просто. Перед каждой функцией пишем if used INTTOSTR, в конце – end if. Если указанный литерал (INTTOSTR) не используется, код не включается.
            Jin X, всё сегмент кода :-)
              Компилятор в общем случае просто не знает, используется ли функция. Тот факт, что она не используется тут, не означает, что она не вызывается откуда-то ещё. Другое дело линкер, который из всех объектников собирает единый исполняемый модуль.
              Так что да. Самый надёжный вариант – раскидать все функции по разным .asm, по одной на файл, все их скомпилить в .obj и собрать из них .lib. При сборке приложения просто указать линкеру эту либу, и он сам вытащит оттуда всё, что требуется, и ничего лишнего.
                Еще можно каждую функцию выразить в виде макроса, который будет включать ее при использовании. Это все с теми же #define/#ifdef, но тут хотя бы не надо вручную за этим следить. И вызовы к функции будут по ее имени, а не через команду call.
                  Цитата macomics @
                  Еще можно каждую функцию выразить в виде макроса, который будет включать ее при использовании.
                  Важно добавить, что при этом эти функции будут inline.

                  Кстати, я делал как-то "модуль" callx.inc, который как предназначен для того, чтобы отфильтровывать ненужные процедуры, см. тут: Механизм исключения неиспользуемых процедур из кода
                  Сам уж забыл про это :lol:
                    Цитата Jin X @
                    Важно добавить, что при этом эти функции будут inline.

                    Я предполагал, что в макросы будут добавлены сами вызовы, а не код функций.
                      macomics, тогда callx.inc – самое то :)
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0255 ]   [ 15 queries used ]   [ Generated: 29.11.22, 05:31 GMT ]