Blog. Just Blog

Удобная компиляция DLL в FASM

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Удобная компиляция DLL в FASM
Удобная компиляция DLL в FASM

Поделюсь маленьким лайфхаком, как можно удобно компилировать DLL в FASM. Предположим, что в вашем проекте должен быть исполняемый файл и динамическая библиотека. Вроде бы ничего сложного, принципиальная разница в заголовках исходников:
  1. ; Файл будет скомпилирован в DLL
  2. format PE GUI 4.0 DLL
  1. ; Файл будет скомпилирован в EXE
  2. format PE GUI 4.0
А как быть, если нужно, чтобы в проекте были одновременно program.exe и program.dll? Держать два исходника с одинаковым именем невозможно (всякие экзотические случаи окружения не рассматриваем); переименовывать каждый раз после сборки что-то-там.dll в program.dll лениво; собирать файлы из разных папок неудобно; если поменять расширение со стандартного ".asm" на кастомное, то слетит ассоциация и иконка файла в Проводнике; оставлять разные имена можно, но не выполняется начальное условие задачи. Я понимаю, что весь смысл Ассемблера заключается в непрерывном преодолении и подобные мелочи настоящего джедая не остановят. Но если есть возможность хоть немного облегчить работу программиста, то почему бы этого не сделать.

Несколько строчек теории. FASM штатными средствами позволяет указывать расширение файла, которое должно получиться после компиляции. К сожалению, на имя готового файла это не распространяется, по крайней мере на актуальных версиях. Например, следующий исходник будет собран в файл с расширением .bin, который имеет внутреннюю структуру динамической библиотеки:
  1. format PE GUI 4.0 DLL AS "bin"
Получается очень простое решение задачи. Для основного исполняемого файла исходник должен называться program.asm и иметь обычный заголовок, тут все без изменений. Для динамической библиотеки имя исходника должно быть вида program.dll.asm, а в заголовке обязательно надо указать пустое расширение:
  1. format PE GUI 4.0 DLL AS ""
Таким образом, при компиляции файлу фактически будет присвоено пустое расширение, но, так как имя его исходника без учета расширения было program.dll, то оно и станет новым именем файла с нужным нам расширением. Цель достигнута. При этом решение полностью лишено всех перечисленных выше недостатков.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 331 | Комментариев: 4

Метки: Assembler, FASM

Комментарии

Отзывы посетителей сайта о статье
ManHunter (01.01.2022 в 01:50):
Понятно. Вообще не в тему.
Алексей (31.12.2021 в 21:19):
ManHunter, ну как пример http://datadump.ru/rundll32/
ManHunter (29.12.2021 в 07:24):
Так и тут все в одном файле, не надо отдельно таскать ресурсы и инклуды. А где почитать про .cpl? Гуглояндесы выдают только файлы контрольной панели.
Алексей (29.12.2021 в 01:38):
Интересно, а что .cpl не особо популярен. Ведь не надо таскать лишние прибамбасы, всё в одном файле.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2022
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0037 сек.) / Память: 5 Mb
Наверх