Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #92, АВГУСТ 2006 г.

Битва трансляторов

Крис Касперски

Хакер, номер #092, стр. 092-118-7


Из мелких недочетов можно назвать невозможность автоматической генерации короткого варианта инструкции «push imm8» и отсутствие контроля над соответствием транслируемых инструкций типу указанного процессора (команда «cpuid» под «.486» ассемблируется вполне нормально, а ведь не должна).

Непосредственная трансляция примеров из SDK/DDK под NASM'ом невозможна, так что разрабатывать на нем драйвера под Windows может только очень крутой поклонник или извращенец. NASM — один из лучших ассемблеров под Liux/BSD, а вот под Windows его позиции уже не так сильны (в основном из-за неполной совместимости с MASM'ом).

YASM

Когда развитие NASM'а приостановилось, его исходные тексты легли в основу нового транслятора — YASM, что в зависимости от настроения может расшифровываться и как Yes, it's an assembler, и как Your favorite assembler, и как Yet another assembler, и даже как Why an assembler (последнее – шутка).

Вот основные отличительные черты YASM'а от его предшественника: поддержка платформы AMD x86-64, оптимизированный парсер, переваривающий синтаксис как NASM, так и GAS, более полная поддержка COFF (DJGPP) и Win32 obj выходных файлов, генерация отладочной информации в формате CodeView, интернационализация (выполненная через GNU-библиотеку gettext) и прочие мелкие улучшения, которых вполне достаточно, чтобы потеснить NASM в мире UNIX-подобных систем, где GAS-синтаксис по-прежнему играет ведущую роль.

Под Windows же YASM не имеет никаких ощутимых преимуществ перед MASM'ом, за исключением того, что поддерживает возможность генерации двоичных файлов, особенно удобных для создания shell-кода, но бесполезных для разработчика драйверов.

Назад на стр. 092-118-6  Содержание