yasm
Модульный ассемблер, представляющий собой полную переработку ассемблера NASM. Он спроектирован как переносимый и перенацеливаемый инструмент, поддерживающий несколько синтаксисов, наборов инструкций и форматов выходных файлов. Yasm распространяется под лицензией BSD и является популярным выбором для разработки, где требуется гибкость и поддержка различных платформ.
Особенности
- модульная архитектура, позволяющая легко добавлять новые синтаксисы, препроцессоры и форматы вывода;
- поддержка двух основных синтаксисов ассемблера: NASM и AT&T (GAS);
- генерация объектных файлов в различных форматах: ELF32/ELF64, COFF, Win32/Win64, Mach-O (32/64 бита), RDOFF2 и чистый бинарный формат;
- поддержка отладочной информации STABS, DWARF 2 и CodeView 8;
- наличие встроенного оптимизатора.
Основные компоненты
Yasm предоставляет единую команду с набором опций для управления процессом ассемблирования (подробнее с документацией можно ознакомиться здесь).
Управление целевой архитектурой
Позволяет выбрать набор инструкций и разрядность целевой платформы. По умолчанию используется архитектура x86, поддерживающая как 32-битный (IA-32), так и 64-битный (AMD64) код.
Основные опции:
-a archили--arch=arch— выбор целевой архитектуры. Для просмотра доступных архитектур можно использоватьhelpв качестве значения;-m machineили--machine=machine— выбор конкретной модели архитектуры, например,x86(32-битная) илиamd64(64-битная).
Выбор формата выходного файла
Определяет тип создаваемого объектного файла. Это ключевая опция для интеграции с различными линкерами и операционными системами.
Основные опции:
-f formatили--oformat=format— выбор формата вывода. По умолчанию используетсяbin. Поддерживаемые форматы включаютelf32,elf64,coff,win32,win64,macho32,macho64и другие;-o filenameили--objfile=filename— указание имени выходного файла. Если не задано, имя формируется автоматически на основе входного файла и выбранного формата.
Выбор синтаксиса
Yasm может принимать код, написанный в различных синтаксисах ассемблера, что облегчает перенос проектов.
Основные опции:
-p parserили--parser=parser— выбор парсера. Доступныnasm(по умолчанию) иgasдля синтаксиса GNU AS;-r preprocили--preproc=preproc— выбор препроцессора. По умолчанию используетсяnasm-препроцессор. Опцияrawотключает препроцессинг.