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

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

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

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


MASM генерирует отладочную информацию в формате CodeView, которую Microsoft Linker может преобразовывать в PDB-формат, хоть и не документированный, но поддерживаемый библиотекой dbghelp.dll, позволяющей сторонним разработчикам «переваривать» отладочную информацию, поэтому файлы, оттранслированные MASM'ом, можно отлаживать в Soft-Ice, дизассемблировать в IDA Pro и прочих продуктах подобного типа.

Главный недостаток MASM'а — его жуткая «багистность». Стоит только открыть Knowledge Base, посмотреть на список официально подтвержденных багов и… ужаснуться! Как только после этого на MASM'е вообще можно программировать?! Особенно много ошибок встречается в штатной библиотеке. Вот только несколько примеров: dwtoa и atodw_ex не понимают знака и по скорости очень тормозят, хотя в документации написано: «A high speed ascii decimal string to DWORD conversion for applications that require high speed streaming of conversion data»; ucFind не находит в строке подстроку, если длина подстроки равна одному символу; функции BMHBinsearch и SBMBinSearch реализованы с ошибками; некоторые функции обрушивают программу (если передать ustr2dw строку длиннее пяти байт — программа падает).

Другой минус — отсутствие поддержки некоторых инструкций и режимов адресации процессора, например, невозможно сделать jmp far seg:offset, а попытка создания смешанного 16/32-разрядного кода — это настоящий кошмар, который приходится разгребать руками и всячески извращаться, преодолевая сопротивление «менталитета» транслятора.

Наконец, MASM – типичный коммерческий продукт с закрытыми исходными текстами, судьба которых покрыта мраком. Microsoft интенсивно продвигает высокоуровневое программирование, отказываясь от ассемблера везде, где это только возможно, поэтому не исключено, что через несколько лет MASM прекратит свое существование...

Тем не менее, несмотря на все эти недостатки, MASM остается самым популярным профессиональным транслятором ассемблера при программировании под Windows NT, хотя разработчикам приходится плеваться и материться, но реальных альтернатив ему нет.

TASM

Самый популярный транслятор ассемблера времен MS-DOS, созданный фирмой Borland, полностью совместимый с MASM'ом, вплоть до версий 6.x, и поддерживающий свой собственный режим IDEAL с большим количеством улучшений и расширений.

Удобство программирования, скромные системные требования и высокая скорость трансляции обеспечивали TASM'у лидерство на протяжении всего существования MS-DOS (буква «T» означает Turbo). Но с появлением Windows популярность TASM'а стала таять буквально на глазах. Не сумев или не захотев добиться совместимости с заголовочными файлами и библиотеками, входящими в комплект SDK/DDK, фирма Borland решила поставлять свой собственный порт, причем далеко не идеальный. К тому же штатный линкер tlink/tlink32 не поддерживает возможности создания драйверов, а формат выходных файлов (Microsoft OMF, IBM OMF, Phar Lap) не поддерживается линкером от Microsoft. В довершении ко всему формат отладочной информации не совместим с CodeView и реально поддерживается только TurboDebugger'ом и soft-ice.

Назад на стр. 092-118-2  Содержание  Вперед на стр. 092-118-4