Есть множество версий разного рода ассемблеров и соответствующих программных компиляторов. Также немало и всевозможной документации по этим вопросам. Но лично мне кажется, что начинать нужно с классики жанра – знаменитого туториала от Iczelion'a и используемого им пакета Masm32.
Пакет Masm32 (на сегодня 10-я версия) на самом деле имеет компилятор макро ассемблера ml.exe от 1999 года. Т.е. он много лет практически не меняется. Возможно это последняя бесплатная версия, ибо более поздние компиляторы ml.exe принадлежат Microsoft и входят в состав продуктов MS Visual Studio, по крайней мере, начиная с 7-й версии (2000 год). Так что, если у вас есть MS VC7 или выше из VS, то вы можете воспользоваться более новой версией ассемблерного компилятора.
В принципе нас устраивает любая версия Masm32, хоть бесплатная, хоть от MS. Поэтому, для чистоты эксперимента будем работать с Masm32 и компилятором от 1999 года.
Вот перечень файлов, которые нам понадобятся. Они (или аналогичные) есть также и в Visual C++ из MS Visual Studio.
Каталог Bin:
ml.exe – компилятор макро ассемблера; ml.err – пустой текстовый файл, для вывода ошибок компилятора; link.exe – линковшик; rc.exe – компилятор ресурсов; rcdll.dll – библиотека компилятора ресурсов; cvtres.exe – дополнительный компилятор ресурсов; mspdb50.dll – общая библиотека поддержки.
Каталог Lib (для наших целей достаточно):
kernel32.lib shell32.lib msvcrt.lib
Выше этих каталогов мы будем располагать следующие файлы:
write.asm – полученный с помощью IdaPro ассемблерный листинг программы write.exe; headers.inc – файл заголовка для write.asm, описан ниже; write.res – файл ресурсов для write.asm, описан ниже; asm.bat – командный файл, описан ниже.
Опишем используемые нами дополнительные файлы.
Файл заголовка headers.inc
Поскольку нам нужны будут в обязательном порядке lib-файлы, для используемых в ассемблерном коде функций из системных dll-лек, то сразу вставим строку