In this guide you will learn how to install MASM32 on a Windows 10 machine, and also how to modify the Path environment variable to use the MASM tools directly from the command prompt. By the end of the guide you will have an environment to start writing software in assembly.
Let’s begin.
Download MASM for Windows 10
The first thing you need to do is head over to the MASM32 SDK download page. Select a mirror and your download should begin.
Next open up the archive and extract the installer to your desktop.
Installing MASM on Windows 10
Double click on the installer. It will ask for administrator privileges. This application is deemed to be safe so you can safely press yes. After you have granted permissions you will see a dialog similar to the one below:
Click on the install icon on the top left and select the drive you want to use to install MASM. I will select my D: partition. MASM will install all the necessary files to the root directory of whatever partition you select.
Tip: I like to create a separate partition for my assembly projects and install MASM to the root directory of the partition. This makes it much easier to include libraries and includes such as windows.inc and friends.
MASM will proceed to run a bunch of tests to see if you’re computer is compatible and able to run MASM32. You will see a number of dialog boxes appear that require you to press the ok button.
Once the tests are complete press the extract button.
After the extraction has completed you will see another dialog box that informs you a command prompt will appear to complete the installation. Press ok and let the installation finish. It should only take a few moments.
After the installation has finished you will once again see a couple of dialog boxes that require you to press ok. You will also see a different type of dialog box similar to the one below. This runs a VB script to add an icon to your desktop for the MASM editor. If you want an icon on your desktop press yes.
Finally if everything went well you will see the final dialog box telling you the installation is complete.
Don’t run off just yet
I don’t use the default MASM editor. Instead I use Vim, or Sublime. This means I need to call the MASM compiler and linker directly from the command line to build my code. To do this you need to add the location of the MASM32 installation directory to your Path environment variable.
Adding a directory to environment variable Path on Windows 10
Open up the system properties dialog by entering the following command on the command prompt:
sysdm.cpl SystemProperties
Click the advanced tab, and click the Environment Variables button.
Next select the Path item from the list and click Edit.
On the next dialog press New and enter the path to the MASM bin directory. This contains the tools needed to compile and link assembly. For me the path is D:masm32bin. In most cases just change the drive letter if you installed to a different partition. The rest of the path is the same.
Press the ok button, and then then the apply button to save and close the system properties dialog.
Open a new command prompt and enter the following command to run the MASM assembler:
ml
If everything installed correctly and your Path is setup correctly you will see some output similar to the image below:
💡 Assembly Language Weekly Newsletter
Every week I publish a newsletter that contains tutorials, tips, tricks and resources related to assembly language. If you would like to receive this newsletter subscribe here: http://eepurl.com/ghximb
All Done!
And that’s all there is to it folks. If you want to hit the ground running check out my guide on how to compile and link MASM assembly to produce an executable on Windows 10.
If you’re having any issues following this guide please leave a comment and I will help you the best I can. You can also check out the official documentation includes detailed installation instructions and FAQ’s to solve common problems.
В данной статье я хочу рассмотреть вопросы, которые могут возникнуть у человека, приступившего к изучению ассемблера, связанные с установкой различных трансляторов и трансляцией программ под Windows и Linux, а также указать ссылки на ресурсы и книги, посвященные изучению данной темы.
MASM
Используется для создания драйверов под Windows.
По ссылке переходим на сайт и скачиваем пакет (masm32v11r.zip). После инсталляции программы на диске создается папка с нашим пакетом C:masm32. Создадим программу prog11.asm, которая ничего не делает.
.586P
.model flat, stdcall
_data segment
_data ends
_text segment
start:
ret
_text ends
end start
Произведём ассемблирование (трансляцию) файла prog11.asm, используя ассемблер с сайта masm32.
Ключ /coff используется здесь для трансляции 32-битных программ.
Линковка производится командой link /subsystem:windows prog11.obj (link /subsystem:console prog11.obj)
Как сказано в Википедии
MASM — один из немногих инструментов разработки Microsoft, для которых не было отдельных 16- и 32-битных версий.
Также ассемблер версии 6. можно взять на сайте Кипа Ирвина kipirvine.com/asm, автора книги «Язык ассемблера для процессоров Intel».
Кстати, вот ссылка на личный сайт Владислава Пирогова, автора книги “Ассемблер для Windows”.
MASM с сайта Microsoft
Далее скачаем MASM (версия 8.0) с сайта Microsoft по ссылке. Загруженный файл носит название «MASMsetup.exe». При запуске этого файла получаем сообщение -«Microsoft Visual C++ Express Edition 2005 required».
Открываем этот файл архиватором (например 7zip). Внутри видим файл setup.exe, извлекаем его, открываем архиватором. Внутри видим два файла vc_masm.msi,vc_masm1.cab. Извлекаем файл vc_masm1.cab, открываем архиватором. Внутри видим файл FL_ml_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8. Переименовываем его в файл fl_ml.exe, далее, произведём ассемблирование файла prog11.asm, используя ассемблер fl_ml.exe.
MASM в Visual Studio
Также MASM можно найти в папке с Visual Studio (у меня VS 10) вот здесь: C:Program FilesMicrosoft Visual Studio 10.0VCbinml.exe.
Для того, чтобы запустить на 32- или 64-разрядной системе и создавать программы, работающие как под 32-, так и под 64-разрядной Windows, подходит MASM32 (ml.exe, fl_ml.exe). Для того, чтобы работать на 32- и 64-разрядных системах и создавать программы, работающие под 64-разрядной Windows, но неработающие под 32-разрядной нужен ассемблер ml64.exe. Лежит в папке C:Program FilesMicrosoft Visual Studio 10.0VCbinamd64 и вот здесь — C:Program FilesMicrosoft Visual Studio 10.0VCbinx86_amd64.
TASM
Программный пакет компании Borland, предназначенный для разработки программ на языке ассемблера для архитектуры x86. В настоящее время Borland прекратила распространение своего ассемблера.
Скачать можно, например, здесь. Инсталлятора нет, просто извлекаем программу. Вот исходник из книги Питера Абеля (рис. 3.2) «Язык Ассемблера для IBM PC и программирования».
stacksg segment para stack 'stack'
db 12 dup ('stackseg')
stacksg ends
codesg segment para 'code'
begin proc far
assume ss:stacksg,cs:codesg,ds:nothing
push ds
sub ax,ax
push ax
mov ax, 0123h
add ax, 0025h
mov bx,ax
add bx,ax
mov cx,bx
sub cx,ax
sub ax,ax
nop
ret
begin endp
codesg ends
end begin
Выполним ассемблирование (трансляцию) файла abel32.asm.
Корректность работы программы можно проверить, произведя линковку (tlink.exe) объектного файла и запустив полученный файл в отладчике.
Как было сказано выше, MASM можно использовать для работы с 16-битными программами. Выполним ассемблирование (трансляцию) программы abel32.asm с помощью ассемблера MASM:
Ключ /coff здесь не используется.
Линковка производится файлом link16.exe
Вот здесь приводится порядок действий, которые необходимо выполнить для запуска TASM в DOSbox. Для линковки понадобится файл DPMI16BI.OVL
FASM
В статье Криса Касперски «Сравнение ассемблерных трансляторов» написано, что «FASM — неординарный и весьма самобытный, но увы, игрушечный ассемблер. Пригоден для мелких задач типа „hello, world“, вирусов, демок и прочих произведений хакерского творчества.»
Скачаем FASM с официального сайта. Инсталлятора нет, просто извлекаем программу. Откроем fasm editor — C:fasmfasmw.exe. В папке C:fasmEXAMPLESHELLO есть файл HELLO.asm.
include 'win32ax.inc'
.code
start:
invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
invoke ExitProcess,0
.end start
Откроем файл HELLO.asm из fasmw.exe. Изменим строку include ‘win32ax.inc’ на строку include ‘c:fasmINCLUDEWIN32AX.INC’. Запускаем из меню Run → Run.
Вот ссылки на ресурсы, посвященные FASM:
→ FASM на Cyberforum’е
→ FASM на asmworld .com программы под Dos
→ Цикл статей «Ассемблер под Windows для чайников»
→ Сайт на narod’е
FASM в Linux
Для того, использовать FASM в Linux (у меня Ubuntu), скачаем соответствующий дистрибутив (fasm-1.71.60.tgz), распакуем его, в папке у нас будет бинарный файл fasm, копируем этот файл в /usr/local/bin для того, чтобы можно было запускать его из консоли, как любую другую команду.Выполним ассемблирование программы hello.asm из папки fasm/examples/elfexe/hello.asm.
Корректность работы программы можно проверить в отладчике.
Nasm
Nasm успешно конкурирует со стандартным в Linux- и многих других UNIX-системах ассемблером Gas.
Nasm в Linux можно установить с помощью менеджера пакетов или из командной строки: в дистрибутиве Debian (Ubuntu) командой apt-get install nasm, в дистрибутивах Fedora, CentOS, RedHat командой yum install nasm.
Создадим программу, которая 5 раз выводит сообщение “Hello”. Пример взят из книги Андрея Викторовича Столярова “Программирование на языке ассемблера NASM для ОС UNIX”. Учебник, а также библиотека “stud_io.inc” есть на личном сайте автора.
%include "stud_io.inc"
global _start
section .text
_start: mov eax, 0
again: PRINT "Hello"
PUTCHAR 10
inc eax
cmp eax, 5
jl again
FINISH
Выполним ассемблирование и линковку и запустим файл hello.asm.
$ nasm -f elf hello.asm
$ ld hello.o -o hello
$ ./hello
Для 64bit необходимо использовать команду nasm -f elf64 hello.asm
NASM для Windows
NASM для Windows можно установить, скачав соответствующий дистрибутив с соответствующего сайта.
Ассемблирование:
nasm -f bin имя_файла.asm -o имя_файла.com
Ссылки на ресурсы, посвященные Nasm:
→ Сайт А.В. Столярова
→ Сайт, на котором лежит электронный учебник (в архиве)
→ То же самое
AS
Стандартный ассемблер практически во всех разновидностях UNIX, в том числе Linux и BSD. Свободная версия этого ассемблера называется GAS (GNU assembler). Позволяет транслировать программы с помощью компилятора GCC.
Из учебников удалось найти только книгу на английском «Programming from the ground up». На русском удалось найти только одну главу из книги С. Зубкова «Assembler для DOS, Windows и UNIX».
Возьмем пример программы, которая ничего не делает, с сайта. Создадим программу gas.s
.section .text
.globl _start
_start:
movl $1, %eax
movl $2, %ebx
int $0x80
Выполним ассемблирование (трансляцию), линковку и запуск программы:
$ as -o gas.o gas.s
$ ld -o gas gas.o
$ ./gas
Если в данной программе изменить _start на main, то можно выполнить ассемблирование (трансляцию) и линковку компилятором gcc.
.section .text
.globl main
main:
movl $1, %eax
movl $2, %ebx
int $0x80
Выполним ассемблирование (трансляцию), линковку и запуск программы:
$ gcc gas.s -o gas
$ ./gas
Выводы: если вы изучаете программирование под Windows, то вы можете остановить свой выбор на Masm; Tasm больше не поддерживается, но для обучения по старым классическим учебникам подойдёт.
Под Linux Gas подойдет тем, кто использует GCC, а тем, кому не нравится синтаксис Gas, подойдёт Nasm.
P.S. Про обработку строк в ассемблере на примере создания транслятора простого «эзотерического» языка можно прочитать здесь.
P.P.S. Упрощенный ограниченный набор ассемблерных инструкций используется в учебной модели компьютера Little Man Computer, которому у меня также посвящено несколько статей ссылка.
Здравствуйте. дорогие друзья, сегодня мы будем устанавливать Assembler(MASM32), предварительно нам нужно будет скачать MASM32 на компьютер: ну а саму установку мы упростили до простых шагов, поэтому она не займет много времени.
1) Скачать MASM32 архивом с файлами.
Прежде всего вам следует скачать архив masm32, который мы любезно выложили. В нем всего 2 файла.
2) Запустить файл MYASM.EXE
При запуске вам нужно будет указать путь куда вы хотите разархивировать MASM. Лучше выберите вашу директорию на диске C:
3) Поместить файл amake.bat из архива в папку BIN, которая появилась после разархивации.
Также вы можете заметить, что в папке BIN уже есть приложение OLLYDBG, это наш отладчик, и, как вы уже поняли, он установлен. Как им пользоваться, мы расскажем в следующей статье, где будем разбирать тему сложение на Assembler.
4) Настроить переменные среды Windows.
Звучит как то необычно, но ничего сложного здесь нет, это нужно, чтобы мы могли запускать из командной строки наши программы.
Есть несколько способов настройки:
4.1) Открываем Пуск, в поисковой строке вводим(без кавычек) «Переменные среды», откроется окно, в котором нужно создать переменную.
Нажимаем Создать; В поле «Имя переменной» можете ввести, что хотите (я ввел Assembler), а в поле «Значение» нужно ввести путь к папке BIN ( у меня это C:usersникитаBIN ). Жмем Ок.
4.2) Другой способ открыть переменные среды(встречается редко): Мой Компьютер — Свойства — Дополнительно — Переменные среды, далее делаем то же самое, что и в 4.1
Установка MASM32 завершена! Дальше нам нужно будет создать файл с расширением .asm, в котором будет прописан сам код программы для MASM32 и запустить его в командной строке WINDOWS, а как именно это сделать будет описано в следующих статьях.
На этом все, если у вас возникли проблемы, то пишите об этом в комментариях.
MASM is an assembler developed and maintained by Microsoft. MASM (8086) won’t run on Windows 7 or newer versions easily whereas it runs well on Windows XP. That is why in this post I am going to show you how to install MASM in Windows.
This tutorial is valid for Windows 10, 8.1, 8, 7.
So, Let’s begin.
Here are 5 steps to Install MASM in Windows.
1. Setup DOSBox on your OS
First, you have to download DOS Box for your PC
Visite this link (click here)
Click on Download
Wait 5-second download will start automatically
After that install DOSBox if you have any doubts about how to install DOSBox, Here is a Guide on how to install DOSBox on Windows.
2. Download 8086.rar
Visit this link (click here)
Click on Download
3. Setup 8086.rar
Open the zip file that you downloaded in step 2.
Copy the 8086 folders in drive C:
4. Create Assembly file (.asm)
Open your favorite code editor,
Enter the following code
; Hello World program by 360 Tech Explorer’s
DATAS SEGMENT
STRING DB 'Hello World!',13,10,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STRING
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
Save this file with the “.asm” file extension.
5. Run Assembly file (.asm) in Windows
Open DOSBox by clicking on it.
Enter the following command in DOSBox
Z:> mount c c:8086
This command will mount 8086 directory as C drive for DOSBox
Then, execute the following command to navigate into drive C
Z:> c:
If you want to write a new assembly file, execute the following command
C:> edit file_name.asm
If you already have the Assembly file, follow the following steps
Copy your Assembly file to the “C:/8086” folder (remember the name)
Then execute the following to run that file
C:> masm your_file_here.asm
C:> link your_file_here.obj
C:> your_file_here.exe
Hey guys..
In this blog I’m gonna write about one of the
Assembler
software.Hope you follow it.
/* All download links are provided at the bottom of the page for better user interface on mobile devices. */
MASM Assembler: It was one of the Assembler used for programming in Assembly language in 8086 Microprocessor.
Basically MASM Assembler was developed for Windows Xp,But It works in Windows 7 32bit not in 64 bit so you might have to use DosBox for it..
Download and Install MASM Assembler for Windows Xp / Windows 7 32-bit
- Download MASM Assembler(Link in Download Section ↓)
- Extract the downloaded file using winrar to a drive (C:)
Note: At the time of installation please extract the file to Drive C:
To Open/Run MASM :: Open CMD and type the code
- C:
- cd MASM
Note: To execute Programs place your programs in the C:/MASM folder
Follow the commands to execute the program
edit filename.asm //Used to edit the program
masm filename.asm; //Compiling the code
link filename.obj; //linking the object code
debug filename.exe //Executing the code
-t //to trace
-g //to execute
-q //to quit
*Where filename is the name of your program
Install MASM for Windows 7 64-bit/ Windows 8 / Windows 10
Follow the above instruction to download masm and place it in the drive C: as mentioned above
For using Turbo c u need to install DosBox.
Download DosBox Software (Link in Download Section ↓ )
Now the fun part..
If you want to open MASM Assembler to be opened every time you open Dos box then…
Go to Program Files. [Program Files(x86) in 64bit]
Get into DosBox folder.
Find «DOSBox 0.74 Options» and double click to open the file(scroll to the end of file).
And paste the code as shown in image below.
Here’s the code to paste
mount c c:
cd c:
cd masm
That’s it done now you can use MASM Assembler
Downloads
This piece of blog is for VTU 2010 syllabus students..
here are some of the masm programs for you. Just extract them…
Programs Download
That’s it guys if you have any problems or if your are finding difficulty then please feel free to comment and I’ll reply to that..
Author : Abhijith
I’m a BE graduate and is currently a freelancer. I like to play PC games and blog whenever I have free time. Thank you for visiting my blog.
Компиляция действительно важна, это важно! По просьбе маленького друга я написал учебник в стиле дурака для своей среды разработки сборок. Ха-ха, боюсь, он ударил меня!
Ниже приведен отчет о настройке среды разработки на ассемблере на основе DOSBOX + MASM32.
I. Подготовка инструмента
1. Скачать DOSBOX
Введение в инструмент: DOSBox — это программа моделирования DOS, поскольку она использует библиотеку SDL, ее можно легко перенести на другие платформы. В настоящее время DOSBox уже поддерживаетLinux、Mac OS X、BeOS 、palmOS、AndroidОн работает в WebOS, OS / 2 и других системах.
Инструмент официального сайта: http://www.dosbox.com/
Карты
Нажмите скачать
Нажмите ниже
Нажмите на нее, чтобы войти на новую страницу, не беспокойтесь, подождите, будет приглашение на загрузку
Нажмите, чтобы загрузить его, давайте снова загрузим MASM32
2. Скачать MASM32
MASM32 содержит наборы для разработки сборок, состоящие из различных версий инструментов: компилятором сборки является Ml.exe в MASM6.0 и выше, компилятором ресурсов является Rc.exe в Microsoft Visual Studio, а 32-разрядным компоновщиком является Microsoft Visual Studio. Link.exe также содержит другие инструменты, такие как Lib.exe и DumpPe.exe.
Скачать официальный сайт:http://www.masm32.com/
Ссылка для скачивания:http://www.masm32.com/download.htm
Карты
Официальный сайт
Нажмите «Скачать», здесь вы можете выбрать следующую картинку, здесь я выбираю первый
Скорость некоторых друзей не очень хорошая. Предоставьте ссылку на облако Baidu здесь: https://pan.baidu.com/s/12IGj0hCou3QHUuxmGBhZXQ Пароль: 53r1
Во-вторых, установка
1. Установите DOSBOX
Установите загруженный DOSBox0.74-win32-installer.exe, а затем завершите установку напрямую.
2. Настройте DOSBOX
Откройте корневой каталог установки DOSBOX (путь установки по умолчанию: C: Program Files DOSBox-0.74; если это 64-разрядная система, путь установки по умолчанию: C: Program Files (x86) DOSBox-0.74), дважды щелкните файл DOSBox 0.74. Options.bat, после запуска командного файла, система откроет файл конфигурации dosbox-0.74.conf с текстовым файлом Notepad.
Примечание! Примечание!
Сначала мы нажимаем, как показано выше
Поместите курсор на узел [autoexec] файла dosbox-0.74.conf (обычно в конце файла),
Добавьте следующее в конце, сохраните
Найдите файл Dosbox 0.74 Options.bat в папке установки dosbox, добавьте в конце:
mount d d: dos; монтировать диск
путь =% путь%; masm; добавить путь
3. Установите MASM32
Вы можете извлечь и установить загруженный файл masm32v11r.zip и установить его в соответствии с конфигурацией по умолчанию.
Нажмите значок глобуса слева и установите в соответствии с конфигурацией по умолчанию.
После установки вы можете напрямую использовать программу gedit.exe в masm32v11r для записи, компиляции и компоновки ассемблера asm.
Студенты, у которых есть проблемы с процессом установки, связываются, используя наш сборочный инструментарий:
Ссылка: https://pan.baidu.com/s/1Aole8bqs8bEU0AXCOuUVKQ Код извлечения: h8ck
Папка masm должна содержать как минимум следующие четыре файла: masm.exe, link.exe, debug.exe, exe2bin.exe. Из которых:
masm.exe: ассемблер, используется для сборки исходной программы (.asm) для получения целевой программы (.obj);
link.exe: программа связывания, используемая для подключения целевой программы для получения исполняемой программы (.exe);
debug.exe: отладчик для отладки исполняемых программ.
4. Создайте рабочий каталог.
Например, в корневом каталоге диска D создается новая папка dos, и создаются две подпапки asm и masm. Файл masm вручную помещается в masm, а asm используется для сохранения программы сборки.
5. Смонтируйте душ под диском досбокса. Например, он монтируется на диск d в Dosbox, то есть виртуальный диск d существует. Есть два способа:
1) Запустите dosbox и введите Z: > mount d d: dos. d ссылается на диск d в dosbox, а d: dos — это местоположение рабочего каталога dos на этом компьютере.
2) Найдите файл Dosbox 0.74 Options.bat в папке установки dosbox, добавьте в конце:
mount d: dos; монтировать диск
путь =% путь%; masm; добавить путь
d :; ехать на d drive
cd asm; введите папку asm
Редактирование и отладка программ
1. Редактировать исходную программу, Используйте Блокнот и измените суффикс на .asm. Поместите исходную программу в папку dos asm.
assume cs:codesg
codesg segment
mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends
end
2. компиляция, Откройте dosbox и введите команду:
1. Отредактируйте исходную программу. Используйте Блокнот и измените суффикс на .asm. Поместите исходную программу в папку dos asm.
2. Сборник. Откройте dosbox и введите команду:
На этом этапе проверьте папку asm и сгенерируйте объектный файл .obj.
3. Подключиться. Сначала введите ссылку, затем имя файла и нажмите Enter.
Проверьте папку asm и создайте файл .exe.
4. Беги.
В этой программе печать Y — результат выполнения.
5. Ввод в эксплуатацию. Примечание для исполняемых программ. debug filename.exe. Войдите в режим отладки и введите команду после тире. Набор команд можно найти в Интернете.
Например, g: запустить программу. q: выход из режима отладки.
Спасибо, буду заполнять оставшиеся детали! До свидания!
Дневники чайника. Чтива 0, виток0
Знакомство с MASM32 и Win32-программированием
Мне приходит довольно много писем с просьбами рассказать о MASM’е больше. И я решил слегка переделать эту главу.
Кроме того, я уже написал справочные статьи для тех, кто не застал времена MS-DOS. Если интересно, загляните в следующий виток
Как получаются программы?
До сих пор мы писали все примеры в Hiew’e, но этот способ крайне извращенный.
Я использовал его только для того, чтобы вы увидели настоящий Асм.
Вначале очень трудно отличить высокоуровневые наслоения от самого языка Ассемблер,
и некоторое время я сам путал команды процессора и директивы.
Но теперь, когда вы видели язык во всей его наготе, можно слегка приодеть его.
Нормальные программы пишут в обычном текстовом виде, а не как мы раньше (каждую строку сразу транслировали в машинную команду).
Такой текстовый вид называется исходным, а файлы — исходниками, или сырцами (от английского source).
Текст исходника можно писать где угодно, хоть в Ворде (при установленном фильтре простого текста).
На вкус, на цвет…
Я пишу в RadAsm’e. Это целая среда для разработки приложений, очень удобно.
Однако на первых порах рекомендую писать просто в редакторе Far’а, можно подключить к нему специальный плагин Colorer.
Этот плаг подсвечивает синтаксис многих языков программирования. Но всё это не обязательно. Тут каждый сам себе берлогу выстилает.
Когда исходный текст набран и сохранён, его можно компилировать.
За процесс получения готовой программы отвечает компилятор, и состоит этот процесс из двух основных этапов.
- Исходный текст преобразуется в промежуточный файл. Это делает транслятор (в случае с MASM’ом он называется ml.exe).
- Затем создаётся готовый исполняемый модуль в определённом формате. То есть программа.
Это делает линковщик (в случае с MASM’ом он называется link.exe).
Значит, для того чтобы делать программы, нужно иметь текстовый редактор и компилятор,
который состоит из двух основных частей — транслятор и линковщик.
Всё остальное не обязательно, однако реальные программы Win32 используют
внешние функции, стандартные константы и переменные, ресурсы и много другое.
Всё это требует дополнительных файлов, которые мы и видим в…
MASM32 SDK
Это очень распространённый пакет, собранный Стивеном Хатчисоном (Hutch).
Важно понять, что MASM32 вовсе не компилятор, а сборник для программирования под Win32,
в который входит 32-битный компилятор MASM.
Сегодня (С наступающим, 2012-м, годом!) я использую пакет MASM32 версии 10.
Описывать всё, что входит в пакет MASM32 SDK, — не вижу смысла. Лучше сосредоточиться на самом компиляторе.
Матрос, мы сегодня выходим из гравитационного пояса Солнечной системы.
Перед гиперскачком нужно проверить и настроить всё оборудование.
Из чего состоит компилятор MASM?
Основных файлов всего два:
ml.exe — транслятор. Он преобразует исходный текст в obj-файл (объектного формата COFF или OMF),
link.exe — линковщик. Создаёт готовый исполняемый exe или dll модуль (в формате для DOS, Windows…).
Эти файлы включены в основной состав MS Visual Studio (и в .NET).
При желании можно скачать в открытом доступе самые новые версии вместе с Visual Studio Express (или в обновлениях) на сайте MS.
Правда, я не вижу в этом особого смысла (в следующем витке описана причина).
Установка и настройка MASM32
Ну, для начала хорошо бы его иметь. Можно скачать с wasm.ru или с сайта автора.
1. Перед установкой отключите чрезмерно бдительные антивирусы (Каспер в первую очередь).
2. Устанавливать пакет советую на тот диск, где будут ваши исходники.
Теперь полезно прописать в системе путь к файлам компилятора.
В Win7 это можно сделать так:
В меню «пуск» правый клик на «Компьютер» > Свойства > Дополнительные параметры системы > закладка «Дополнительно» > Переменные среды.
Здесь в списке системных переменных нужно изменить значение переменной «PATH». Дописать в конце строки:
;D:MASM32bin
(не пропустите точку с запятой и вместо «D» укажите букву диска на котором установлен MASM32).
Поскольку редактор исходных файлов Quick Editor я не использую (уж больно он убогий),
на этом можно считать подготовку MASM32 к работе завершенной.
Было бы неплохо знать, как вообще проходит процесс написания программы.
Здесь я могу рассуждать только теоретически, так как сам не написал еще ни одной серьёзной программы. :)))
Однако кое-что об этом знаю и с радостью поделюсь своими представлениями.
Реальный процесс разработки программы
Знающие люди говорят, что это творческий процесс. Из чего можно сделать вывод, что дело это крайне личное.
Но общие правила здесь тоже имеются.
- Постановка задачи
- Создание алгоритма (в той или иной степени)
- Кодирование на конкретном языке
- Попытка компиляции. Если счетчик ошибок не ноль, прыг на шаг 3 или даже 2
- Удивление, что оно хоть как-то заработало
- Если счетчик найденных ошибок не ноль, то прыг на шаг 1
- Я пока так оставлю, а потом ещё доделаю
- Если обстоятельства (обычно лень) не позволяют продолжить — проект умирает. Или на шаг 1
Примерно так я делал небольшую программку для личного пользования.
Научить вас ставить задачи я даже пытаться не буду, сам не умею.
Создавать алгоритмы вас научит Кнут, это его стихия, а я могу только восхищаться.
Дональд Эрвин Кнут — Великий Автор, его трёхтомник можно взять на сайте
int3.net (после регистрации).
Мне кажется, человек, который не читал Кнута, программистом себя называть не имеет права (сам я, кстати, тоже не читал :).
А если серьёзно, то абсолютное большинство существующих учебников и литературы о программировании не может выжить и семи лет,
потому что такие книги ориентированы на изучение возможностей того или иного языка (как мои статьи).
Кнут же на протяжении полувека(!) учит создавать реальные программы, а не оболочки для простого ввода/вывода.
Думаю, вы поняли, что его книгу хорошо бы купить. Цена, правда, хорошая, но трёхтомник того стоит.
Итак, вернёмся к бренной жизни.
Кодирование на конкретном языке — вот о чем мы тут толкуем.
Правда не надо забывать, что программа ещё должна работать под конкретной системой.
Win32
Многие считают, что мир форточек устроен по законам Майкрософт, но это лишь очень поверхностный взгляд.
Как бы ни старались специалисты этой конторы,
они тоже вынуждены подчиняться правилам Intel. Так что главное отличие DOS-среды от Windows —
это то, что последняя опирается на защищённый режим процессора (Protected Mode — PM).
Кардинальное отличие PM от Real Mode — новый (довольно хитрый) механизм работы с памятью, и он сильно изменил жизнь программистов.
Win32 использует страничную адресацию памяти, которая является надстройкой над сегментной адресацией защищённого режима.
Несмотря на то, что работа с памятью в PM устроена сложно и запутанно, внешне всё выглядит элементарно.
По крайней мере в Windows адресацию сделали довольно удобной.
В данном случае советую всем начать именно с внешнего осмотра.
Ну если, конечно, вы самые смелые, самые умные и уже готовы разбирать всё по винтикам изнутри,
тогда берите учебник по i80386 процессору и читайте про селекторы,
таблицы дискрипторов, разбирайтесь, как в PM при страничной адресации формируется физический адрес из линейного.
Лучше, конечно, начать с рассылки Broken Sword’a.
Но что-то мне подсказывает, что вам пока рано браться даже за популярное изложение особенностей PM :).
Сам я уже год как пытаюсь подступиться к этой теме, просветление уже где-то рядом.
Внешний осмотр Win32.
Что же мы имеем после загрузки форточек:
- Каждая программа загружается в собственное изолированное виртуальное адресное пространство (Виртуальное Пространство Процесса).
- Адреса в таком ВПП могут быть от 00000000 до FFFFFFFF (4Gb), будем называть их виртуальными.
- При загрузке и далее при выполнении в эту виртуальность проецируется всё необходимое для работы программы
(код и данные операционной системы, динамические части самой программы, файлы и т.п.). - Программа, кроме собственных вычислений, практически ничего самостоятельно сделать не может.
Ей приходится просить ОС вывести что-либо или предоставить в её ВПП. Для этого она вызывает нужные API-функции. - Файлы с машинным кодом и данными у Win32-программ устроены в соответствии с PE-форматом,
который довольно сильно связан с особенностями защищённого режима процессора.
Исполняемые файлы PE-формата делятся на секции. Должна быть минимум одна секция (секция кода),
но файл может иметь и другие секции для разных целей (данные, ресурсы, служебные секции и т.д.).
А ещё нужно знать, что в защищённом режиме существуют 4 уровня привилегий. Нулевой самый сильный,
3-й самый слабый. Эти уровни называют кольцами (ring0,1,2,3).
Win32 использует только ring0 для ядра и драйверов и ring3 для прикладных программ.
Таких поверхностных данных вполне достаточно, чтобы мы могли дальше разумно изучать программирование на Ассемблере,
и приступить к программированию WinAPI.
По крайней мере сам я о защищённом режиме и о том, как его используют форточки знаю немногим больше :(.
Так что будем учиться вместе.
Первый пример Windows-программы
Давайте рассмотрим, как может выглядеть маленькая программа для Win32, написанная под MASM.
prax05.asm:
.386 .model flat, stdcall option casemap :none ; case sensitive ;######################################################################### include masm32includewindows.inc include masm32includeuser32.inc include masm32includekernel32.inc includelib masm32libuser32.lib includelib masm32libkernel32.lib ;######################################################################### .data MsgBoxCaption db "It's the first your program for Win32",0 MsgBoxText db "Assembler language for Windows is a fable!",0 ;######################################################################### .code start: invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL end start
Языка Ассемблер здесь нет! Этот текст будет преобразован в запускаемый файл формата PE (Portable Executable — портируемый exe-формат).
То есть стандартную программу для форточек.
Попробуйте набрать в файл «prax05.asm» все эти строки, большая часть которых, кстати сказать, — директивы MASM’a.
…Хотя это как раз можно и не набирать, ещё успеете натыкаться :), возьмите мой файл.
Компилировать программу новичку проще всего так (читатели меня всё-таки убедили =):
1. Открыть редактор исходных файлов «Quick Editor» (икона «MASM32 Editor» на рабочем столе).
2. Открыть или набрать в нём пример.
3. После всех изменений обязательно нужно сохранить пример и обязательно на тот диск где установлен MASM32.
4. Для самой компиляции нужно выполнить пункт меню Project > Build All.
5. Должно появиться консольное окошко с отчётом компилятора (если консоли нет, значит, по какой-то причине компиляции не было).
Запустить пример можно из того же Quick Editor’a кнопкой «Run File» или пунктом меню Project > Run Program.
Если вы планируете работать с компилятором на разных дисках, то самый грубый, но быстрый и универсальный, способ решить проблему компиляции – тупо скопировать папку MASM32 в корень всех дисков, где будет проходить компиляция программ.
Хочу предостеречь юные умы от выражений типа «иконка открывает MASM».
В корне неправильные слова влекут неправильные выводы и действия.
Ещё раз обращаю ваше внимание: MASM – это компилятор, он состоит из двух частей (ml.exe и link.exe). Обе части не имеют другого способа общения с пользователем кроме как через командную строку. А иконка на рабочем столе открывает программу-посредник под названием «Quick Editor», которая для компиляции всего лишь запускает файл build.bat.
И тут мы переходим к следующему уровню пользования компилятором.
Другой способ компиляции программ — использовать файл build.bat без посредника (описание в следующем витке).
В командной строке ОСи (В Far’e внизу или в «Пуск > Все программы > Стандартные > Командная строка») набираем следующее:
build prax05
! Разумеется, текущей папкой должна быть папка с исходником.
! Имя файла в командной строке пишите без расширения.
! Расширение у файла должно быть asm.
! файл должен быть на диске с пакетом MASM32 в корне.
После нажатия Enter вызовется бат-файл. Его задача превратить текстовый файл (исходник) в готовую программу (бинарник). Для этого он выполняет ml.exe с параметрами
"/c /coff prax05.asm"
Если в исходнике нет явных ошибок, появится файл prax05.obj.
И далее выполнится link.exe, который и создаст готовую Win-программу.
На выходе мы имеем два файла. Один — объектный, он нам не пригодится, это для нас промежуточный файл.
Второй — exe, сами знаете, что с ним делать.
Ошибки будут — это я гарантирую. Опечатки обычно быстро находятся, так как компилятор сообщает тип ошибки и строку, которая её вызывает.
Однако это далеко не всегда означает, что ошибка именно в этой строке.
Тут нужно головой думать. Подозреваю, что она у вас работает хорошо, раз мы с вами добрались до Windows.
Но если у вас недостаточно знаний пользователя и из-за этого не собирается даже пример prax05.asm, — не расстраивайтесь.
Прочитайте главу следующего витка.
Должно помочь и уж, по крайней мере, поднимет ваш «уровень юзера». Да, да, у вас всё получится…
Поздравляю, матрос! Мы в гиперпространстве.
Полноценная программа для Windows. Её уже не исследуешь в CodeView. Для отладки форточных программ мы запаслись OllyDbg.
Хорошо бы настроить и его (цвета, шрифты, размер и пути в ini-файле).
Это у вас займёт некоторое время, ко всему надо привыкнуть.
Я всё-таки надеюсь, вас не испугает такая небольшая программка весом в 2Mb,
ведь вы наверняка настраивали и более навороченные приложения. Кроме того, недавно хорошие ребята,
потрудившись наславу, сделали русский help, который можно взять тут.
Спасибо: deNULL, HyPeR, name, Wenden.
Exe-файл формата PE содержит кучу всякой ерунды, которая, впрочем, необходима для запуска Win32-программы.
Сложного там ничего нет, позже вы скорее всего познакомитесь с устройством PE-формата, а сейчас нужно понять лишь одно.
На начало исполняемого кода программы в памяти указывает Entry Point (EP — точки входа).
В разных программах она может указывать на разные адреса.
Но в простых примерах, собранных build.bat’ом, адрес первой команды будет 401000h.
Значение EntryPoint в таком случае будет = 1000h, плюс Image base 400000h = 401000h.
Про PE-формат мы, наверное, ещё поговорим, и даже очень плотно, ну а сейчас…
Откройте prax05.exe в OllyDbg. Для этого достаточно загрузить Olly и открыть программу как обычный документ в форточках.
После работы Win-загрузчика Олли покажет вам первую инструкцию в окне кода (ориентируясь именно на EP).
Исследовать этот пример вам пока не надо, через регистры здесь слишком трудно разобраться.
- В верхней левой части — вся программа, которая выводит на экран сообщение типа Message Box.
Вы видите, нет ни одной строчки из исходного файла prax05.asm, потому что это уже Ассемблер! - Вверху справа — регистры процессора (заметьте, EBX стоит четвёртым, рядом с регистрами-указателями, и флаги выглядят по-другому).
Как я уже сказал, регистры селекторов (сегментные регистры ES-GS) нас не волнуют, даже не обращайте на них внимание. - Внизу слева — байты памяти (Olly сразу же показывает секцию данных программы).
- Внизу справа отображается содержимое стека (о нём следующая глава).
Нужно заметить, несмотря на то, что Ollydbg выглядит как обычная программа,
это всё-таки отладчик и у него есть свои ограничения.
Рекомендую, например, закрывать его каждый раз, как вам понадобится загрузить новую программу.
Мы узнаем, как работает этот пример, но прежде остановимся на исходнике.
Весь код из исходника, кроме двух строк, будет во всех программах Win32 под MASM’ом, поэтому вы должны знать, что он означает.
Но не воспринимайте это слишком серьёзно. Там будет много длинно-умных слов. За такими словами очень часто прячется дребедень.
Хочу, чтобы вы поняли одну простую вещь. Совсем скоро вы будете знать команды Асма,
и если вы поймёте основы программирования, а затем познаете интерес математики :), то каждый из вас сможет написать собственный компилятор
для программ Ассемблера, возможно, не хуже MASM’a или FASM’a. Вы сможете сами придумывать всякие директивы,
псевдокоманды, макросы, плагины и новые удобные фишки. Но команды процессора — совсем другое дело.
Кроме того, что они в процессоре и изменить их нельзя (уточнение), большинство из команд имеет под собой математическое основание,
заложенное в структуру цифровых технологий. Поэтому приоритет нужно отдавать в пользу команд процессора.
А директивы MASM’a и все страшные слова за ними воспринимайте поверхностно.
Я бы вообще не объяснял их (как Калашников в первых уроках), если б не знал,
как сильно отвлекает внимание новичка непонятная строка в исходнике.
Теперь можно приступать к разбору этих самых директив.
Писать каждый раз такой код заново не надо. Это каркас программы для форточек.
Мало того, к этому каркасу будут добавляться такие же постоянно повторяющиеся вещи.
Создали один раз файл-заготовку — и далее можно вписывать туда только полезный код.
;#########################################################################
Я уже не раз говорил, что после точки с запятой идёт комментарий. Значит, MASM такую информацию не воспринимает.
Можно писать всё что хочется.
.386
Это директива, указывающая компилятору, что в программе будут использоваться команды процессора i80x386.
В exe эта информация записывается в самом начале после заголовка PE. Если интересно, найдите в exe-файле буквы PE.
Потом идут два нулевых байта, так как заголовок PE — это dword (4 байта).
В следующем слове (двух байтах) как раз и будет информация о командах процессора, которые используются программой.
Всё, от 386-го до сегодняшних 32-битных Intel-совместимых процессоров, обозначается кодом 014Сh. Для нас такая информация бесполезна,
а вот директива «.386» обязывает нас не использовать новые команды, иначе программа не соберётся,
пока мы не исправим эту директиву на «.486» или «.586» :).
.model flat, stdcall
Директива «.model» задаёт модель памяти flat для нашей программы. Модель flat лучше переводить: сплошная модель,
а не плоская, как многие пишут.
Stdcall — это «уговор» о том, кто будет чистить параметры (функция, которую вызвали, или сам вызывающий).
Мы всегда будем использовать вариант «функция чистит свои параметры».
Он и называется stdcall. Однако такое объяснение далеко не полное, и я вернусь к параметру stdcall при объяснении вызова функций.
К этому моменту вы уже будете знать, что такое стек.
От директивы .model явным образом зависит скомпилированный код в объектном файле и также зависит формат получившегося исполняемого файла.
option casemap :none ; case sensitive
Это просто. Всё уже объяснено в комментарии. В этой строке включается чувствительность к ПРОПИСНЫМ или строчным символам.
То есть «МЕТКА» и «метка», «Имя» и «имя» будут уже не одно и то же!
На exe это никак не отражается.
;######################################################################### include masm32includewindows.inc include masm32includeuser32.inc include masm32includekernel32.inc includelib masm32libuser32.lib includelib masm32libkernel32.lib
Include — директива для подключения файлов (их расширение не обязательно должно быть inc).
В подключаемых файлах может быть всё то же самое, что и в основном файле.
То есть исходный код программы, данные, макросы (тоже код), комментарии и т.д.
Причём вы можете вставлять инклуды, например, в середине кода, а продолжать программу уже в том файле.
В этих трёх inc-файлах в текстовом виде содержатся описания констант, структур и прототипов функций Windows.
Далее я всё объясню, и вы поймёте, что это очень просто — как словарь или каталог товаров.
Вы можете перенести нужные описания в наш файл, и подключать inc’и не придётся, только это неудобно.
Includelib — директива для подключения файлов импорта. Я сам только что в первый раз задумался: а что в lib-файлах?
Думаю, что вам сегодня объяснять это не нужно.
Просто там информация о системных библиотеках, на основе которой будет сформирован вызов API-функций в нашей программе.
В exe-файл в данном случае из inc’ов не попадёт ни строчки кода,
но компилятору они нужны для преобразования двух полезных строк (invoke) в машинный код.
А из lib-файлов будут взяты две строки кода и данные, которые в exe запишутся в директорию импорта (всё тот же PE-формат).
;######################################################################### .data
Вот это очень интересная строка. Тоже директива.
Чтобы разделить код и разного рода данные, в exe-файлах существуют секции.
У каждой секции свои атрибуты и они тоже напрямую связаны с защищённым режимом.
Это позволяет стабилизировать работу программ и упорядочить процесс написания.
Считается, что машинный код менять не нужно, значит, для него подойдёт атрибут read only (только чтение).
А данные (как теперь считается) выполнять не нужно, значит, можно в секции данных выключить атрибут исполняемого кода.
Слава Богу, что всё это только теоретически (пока). Любая секция может содержать и код, и данные, и соответствующие атрибуты.
Так что сейчас можно воспринимать секции только как полезную для программистов вещь.
Итак, секция данных объявляется директивой «.data», и это выставляет в ней нужные для данных атрибуты.
Так же, как мы вписывали строки текста в конце файла (после кода программы), эта секция по умолчанию будет размещаться в exe-файле после кода.
MsgBoxCaption db "It's the first your program for Win32",0 MsgBoxText db "Assembler language for Windows is a fable!",0
Здесь от MASM’a только db. Перед ним идут названия переменных. После db идёт содержание переменной, то есть текстовые или цифровые данные.
Если данные текстовые, то они помещаются в кавычках или апострофах. А если данные просто байты, то так и пишут через запятую.
Добавьте в этой секции вот такую строку:
LaLa db 00,0FFh, 11d, 0ABh, 01010101b
Теперь соберите файл ещё раз (старые obj и exe будут стёрты build.bat’om).
Несмотря на то, что переменная LaLa в коде не использовалась, в готовой программе будут эти байты:
00 FF 0B AB 55
Найдите их, загрузив пример в отладчик OllyDbg.
Я уже говорил, что обычно мы будем заканчивать строку текста нулевым байтом.
Теперь вы видите, как это пишется в синтаксисе MASM’а.
Str1 db "строка",0
или так:
Str2 db 'строка',00h
В файле будет одно и то же: байты символов и 00.
А Str1, Str2 — это имена переменных, они могут быть любые, лишь бы не нарушали правил, описанных в help-файлах MASM’a.
Осталось объяснить, что такое db — одна из ряда однотипных директив инициализации данных и их резервирования.
Длинные слова, мало что значат.
DB — сокращение от Data in Bytes (данные в байтах).
Есть ещё DW (Data in Words), и DD (Data in Dwords), и ещё несколько аналогичных, побольше.
Суть только в том, что запятая в DB разделяет байт, а в DD запятая разделяет 4 байта. Пример.
В исходнике так:
Str1 dd 0, 1, 0FFFFFFFFh
В файле будет:
00 00 00 00 01 00 00 00 FF FF FF FF
В исходнике так:
Str1 db 0, 1, 0FFh
В файле будет:
00 01 FF
А строка
Str1 db 0,1,0FFFFFFFFh
вызовет ошибку при сборке файла — размер в последней запятой не тот.
Вот и все основные премудрости представления целочисленных данных без знака (то есть положительных целых чисел) в MASM’e.
Хотя нет, забыл сказать, что можно ещё объявлять резерв. Данные, которые на момент старта программы ещё не появились.
Для чего это делается?
Допустим, в программе много промежуточных данных. Вписывая их в секцию неинициализированных данных (.data?),
мы экономим в размере файла. Пока программа не стартовала, никаких данных в этой секции нет,
а вот во время загрузки OS выделяет память сразу под все данные.
На первых порах можно спокойно писать все данные в секцию .data. Файл от этого больше не станет,
а наоборот, будет только меньше. В PE-формате есть много всяких тонкостей, одна из них — это выравнивание секций.
В большинстве программ в конце каждой секции есть нули, посмотрите в Hiew’e, и вы увидите, сколько места пропадает.
Если я ничего не путаю, то секция должна быть кратна 512 байтам (200h).
Значит, если у вас нет данных на эту сумму, то лучше не заводить новую секцию «.data?» а писать всё в «.data».
Здесь закончилась секция данных…
.code
…и началась секция кода.
Это единственная секция, без которой программу не собрать.
Но я ещё раз повторяю: «.code» вовсе не означает, что данных сюда класть нельзя.
Правда, если данные изменяются и они в секции кода — это вызовет проблему (не те атрибуты секции). Хотя руками можно всё :).
start:
Вот мы и добрались до нашей первой метки. Метки в exe-файл не идут.
Первая метка начинает код программы. Можно написать хоть «tuki_puki:», лишь бы в конце кода было «end tuki_puki».
Что и сообщит MASM’у, где кончилась программа, а самое главное — где она началась.
Далее мы всё время будем использовать метки. Они начинают строки, к которым нам нужно прыгать.
При сборке программы компилятор подставляет адреса команд в памяти вместо обращений к меткам. Это гораздо удобнее, чем писать:
JMP 00
Такая команда будет ошибочна, так как, я уже сказал, EP будет указывать на разные адреса в разных программах.
Пока что адрес в памяти для первой инструкции будет 401000, а если код программы усложнится, то адрес может стать другим. Если вы запишете:
JMP start
то больше об адресах беспокоиться не надо. В exe окажется правильная маш.команда, а на Асме она будет выглядеть «JMP 00401000» или куда укажет метка.
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL
В этих двух строчках и скрывается сама программа.
Первая строка вызывает API-функцию MessageBox и передаёт ей необходимые параметры.
Вторая строка выполняет действие, похожее на int 20 в DOS. Это завершающий код с параметром NULL.
На самом деле в коде будет не NULL, а нулевой байт (00h). Это значит, что и здесь можно писать:
invoke MessageBox, 0, addr MsgBoxText, addr MsgBoxCaption, 0 invoke ExitProcess, 0
Подробный разбор содержания этих двух строк будет уже в следующей Чтиве.
Она была написана год назад, я тогда в первый раз увидел в WinXP код программы на Асме, поэтому дотошно описывал всё новое (но с таким количеством ошибок! :/).
end start
Найдя оператор END в этом случае, компилятор MASM’a сочтёт, что метка «start» будет точкой входа в программу.
Потому что больше заканчивать в этом файле нечего. Именно со строки
END первая метка
начнётся трансляция полезного кода в файл :).
В любой программе под форточки используется стек, и в следующей главе я расскажу о нём.
Bitfry
<<предыдущая глава следующая глава>>
Вернуться на главную
— Фирма Интел после всем известной ошибки Пентимума
разработала специальную утилиту для «конечных» пользователей,
благодаря которой можно изменять код микропрограммного блока управления в процессорах «выше» Пентиума.
То есть у нас с вами теоретически есть возможность менять свойства инструкций процессора.
Некоторую информацию вы можете получить в популярной статье iXbt, а также здесь.
Содержание
- Пошаговая установка MASM32
- 1) Скачать MASM32 архивом с файлами.
- 2) Запустить файл MYASM.EXE
- 3) Поместить файл amake.bat из архива в папку BIN, которая появилась после разархивации.
- 4) Настроить переменные среды Windows.
- MASM, TASM, FASM, NASM под Windows и Linux
- MASM под Windows: быстрый старт
- Установка MASM
- Простейшая программа
- Трансляция и запуск программы
- Как это устроено
- Командный файл для упрощения запуска
- MASM для x64 (ml64.exe)
- добавление файла ассемблерного языка в проект Visual Studio C++
- добавление файла ассемблерного языка в существующий проект Visual Studio C++
- Директивы, относящиеся к ml64
Пошаговая установка MASM32
Здравствуйте. дорогие друзья, сегодня мы будем устанавливать Assembler(MASM32), предварительно нам нужно будет скачать MASM32 на компьютер: ну а саму установку мы упростили до простых шагов, поэтому она не займет много времени.
1) Скачать MASM32 архивом с файлами.
Прежде всего вам следует скачать архив masm32, который мы любезно выложили. В нем всего 2 файла.
2) Запустить файл MYASM.EXE
При запуске вам нужно будет указать путь куда вы хотите разархивировать MASM. Лучше выберите вашу директорию на диске C:
3) Поместить файл amake.bat из архива в папку BIN, которая появилась после разархивации.
Также вы можете заметить, что в папке BIN уже есть приложение OLLYDBG, это наш отладчик, и, как вы уже поняли, он установлен. Как им пользоваться, мы расскажем в следующей статье, где будем разбирать тему сложение на Assembler.
4) Настроить переменные среды Windows.
Звучит как то необычно, но ничего сложного здесь нет, это нужно, чтобы мы могли запускать из командной строки наши программы.
Есть несколько способов настройки:
4.1) Открываем Пуск, в поисковой строке вводим(без кавычек) «Переменные среды», откроется окно, в котором нужно создать переменную.
Нажимаем Создать; В поле «Имя переменной» можете ввести, что хотите (я ввел Assembler), а в поле «Значение» нужно ввести путь к папке BIN ( у меня это C:usersникитаBIN ). Жмем Ок.
4.2) Другой способ открыть переменные среды(встречается редко): Мой Компьютер — Свойства — Дополнительно — Переменные среды, далее делаем то же самое, что и в 4.1
На этом все, если у вас возникли проблемы, то пишите об этом в комментариях.
Источник
MASM, TASM, FASM, NASM под Windows и Linux
В данной статье я хочу рассмотреть вопросы, которые могут возникнуть у человека, приступившего к изучению ассемблера, связанные с установкой различных трансляторов и трансляцией программ под Windows и Linux, а также указать ссылки на ресурсы и книги, посвященные изучению данной темы.
Используется для создания драйверов под Windows.
По ссылке переходим на сайт и скачиваем пакет (masm32v11r.zip). После инсталляции программы на диске создается папка с нашим пакетом C:masm32. Создадим программу prog11.asm, которая ничего не делает.
Произведём ассемблирование (трансляцию) файла prog11.asm, используя ассемблер с сайта masm32.
Ключ /coff используется здесь для трансляции 32-битных программ.
Линковка производится командой link /subsystem:windows prog11.obj (link /subsystem:console prog11.obj)
MASM — один из немногих инструментов разработки Microsoft, для которых не было отдельных 16- и 32-битных версий.
Также ассемблер версии 6. можно взять на сайте Кипа Ирвина kipirvine.com/asm, автора книги «Язык ассемблера для процессоров Intel».
Кстати, вот ссылка на личный сайт Владислава Пирогова, автора книги “Ассемблер для Windows”.
MASM с сайта Microsoft
Открываем этот файл архиватором (например 7zip). Внутри видим файл setup.exe, извлекаем его, открываем архиватором. Внутри видим два файла vc_masm.msi,vc_masm1.cab. Извлекаем файл vc_masm1.cab, открываем архиватором. Внутри видим файл FL_ml_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8. Переименовываем его в файл fl_ml.exe, далее, произведём ассемблирование файла prog11.asm, используя ассемблер fl_ml.exe.
MASM в Visual Studio
Также MASM можно найти в папке с Visual Studio (у меня VS 10) вот здесь: C:Program FilesMicrosoft Visual Studio 10.0VCbinml.exe.
Для того, чтобы запустить на 32- или 64-разрядной системе и создавать программы, работающие как под 32-, так и под 64-разрядной Windows, подходит MASM32 (ml.exe, fl_ml.exe). Для того, чтобы работать на 32- и 64-разрядных системах и создавать программы, работающие под 64-разрядной Windows, но неработающие под 32-разрядной нужен ассемблер ml64.exe. Лежит в папке C:Program FilesMicrosoft Visual Studio 10.0VCbinamd64 и вот здесь — C:Program FilesMicrosoft Visual Studio 10.0VCbinx86_amd64.
Программный пакет компании Borland, предназначенный для разработки программ на языке ассемблера для архитектуры x86. В настоящее время Borland прекратила распространение своего ассемблера.
Скачать можно, например, здесь. Инсталлятора нет, просто извлекаем программу. Вот исходник из книги Питера Абеля (рис. 3.2) «Язык Ассемблера для IBM PC и программирования».
Выполним ассемблирование (трансляцию) файла abel32.asm.
Корректность работы программы можно проверить, произведя линковку (tlink.exe) объектного файла и запустив полученный файл в отладчике.
Как было сказано выше, MASM можно использовать для работы с 16-битными программами. Выполним ассемблирование (трансляцию) программы abel32.asm с помощью ассемблера MASM:
Ключ /coff здесь не используется.
Линковка производится файлом link16.exe
В статье Криса Касперски «Сравнение ассемблерных трансляторов» написано, что «FASM — неординарный и весьма самобытный, но увы, игрушечный ассемблер. Пригоден для мелких задач типа „hello, world“, вирусов, демок и прочих произведений хакерского творчества.»
Скачаем FASM с официального сайта. Инсталлятора нет, просто извлекаем программу. Откроем fasm editor — C:fasmfasmw.exe. В папке C:fasmEXAMPLESHELLO есть файл HELLO.asm.
Откроем файл HELLO.asm из fasmw.exe. Изменим строку include ‘win32ax.inc’ на строку include ‘c:fasmINCLUDEWIN32AX.INC’. Запускаем из меню Run → Run.
Вот ссылки на ресурсы, посвященные FASM:
Для того, использовать FASM в Linux (у меня Ubuntu), скачаем соответствующий дистрибутив (fasm-1.71.60.tgz), распакуем его, в папке у нас будет бинарный файл fasm, копируем этот файл в /usr/local/bin для того, чтобы можно было запускать его из консоли, как любую другую команду.Выполним ассемблирование программы hello.asm из папки fasm/examples/elfexe/hello.asm.
Корректность работы программы можно проверить в отладчике.
Nasm успешно конкурирует со стандартным в Linux- и многих других UNIX-системах ассемблером Gas.
Nasm в Linux можно установить его с помощью менеджера пакетов или из командной строки: в дистрибутиве Debian (Ubuntu) командой apt-get install nasm, в дистрибутивах Fedora, CentOS, RedHat командой yum install nasm.
Создадим программу, которая 5 раз выводит сообщение “Hello”. Пример взят из книги Андрея Викторовича Столярова “Программирование на языке ассемблера NASM для ОС UNIX”. Учебник, а также библиотека “stud_io.inc” есть на личном сайте автора.
Выполним ассемблирование и линковку и запустим файл hello.asm.
NASM для Windows можно установить, скачав соответствующий дистрибутив с соответствующего сайта.
Ссылки на ресурсы, посвященные Nasm:
Стандартный ассемблер практически во всех разновидностях UNIX, в том числе Linux и BSD. Свободная версия этого ассемблера называется GAS (GNU assembler). Позволяет транслировать программы с помощью компилятора GCC.
Из учебников удалось найти только книгу на английском «Programming from the ground up». На русском удалось найти только одну главу из книги С. Зубкова «Assembler для DOS, Windows и UNIX».
Возьмем пример программы, которая ничего не делает, с сайта. Создадим программу gas.s
Выполним ассемблирование (трансляцию), линковку и запуск программы:
Если в данной программе изменить _start на main, то можно выполнить ассемблирование (трансляцию) и линковку компилятором gcc.
Выполним ассемблирование (трансляцию), линковку и запуск программы:
Выводы: если вы изучаете программирование под Windows, то вы можете остановить свой выбор на Masm; Tasm больше не поддерживается, но для обучения по старым классическим учебникам подойдёт.
Под Linux Gas подойдет тем, кто использует GCC, а тем, кому не нравится синтаксис Gas, подойдёт Nasm.
Источник
MASM под Windows: быстрый старт
Олег Французов
2017
В этом документе кратко описан процесс установки учебной среды на основе ассемблера MASM под ОС Windows, а также порядок работы с ней.
Установка MASM
Скачайте архив c MASM с сайта arch32.cs.msu.su.
Скачайте файл prompt.bat и положите его в ваш рабочий каталог.
Простейшая программа
Для следующего шага вам потребуется текстовый редактор, пригодный для работы с программным кодом. Заметим, что Microsoft Word или встроенный в Windows редактор WordPad являются текстовыми процессорами и для работы с программным кодом непригодны. Редактор Notepad (Блокнот) подходит для работы с текстовыми файлами (plain text), но неудобен в качестве программистского редактора — в нем отсутствует подсветка синтаксиса и другие стандартные для таких редакторов функции.
Вы можете воспользоваться вашим любимым текстовым редактором или, если вы затрудняетесь с выбором, скачать простой программистский текстовый редактор Notepad2.
Примечание: Если вы решили скачать Notepad2, при первом запуске установите ширину табуляции (Tabulator width) в значение 8 при помощи меню Settings > Tab Settings.
Создайте в вашем рабочем каталоге файл hello.asm следующего содержания:
Трансляция и запуск программы
Для запуска программы требуется ее оттранслировать. Первый шаг — запуск ассемблера MASM, который построит по исходному тексту програмы объектный файл:
Аргумент /c инструктирует ассемблер выполнить только трансляцию в объектный файл, без компоновки (которую мы выполним чуть позже). Аргумент /coff указывает формат объектного файла — COFF (Common Object File Format).
Аргумент /subsystem:console говорит компоновщику, что нужно построить консольное Windows-приложение.
Как это устроено
Командный файл prompt.bat запускает окно командной строки и задает переменные окружения так, чтобы программы ml и link были доступны без указания пути к ним, а пути к include- и lib-файлам MASM также были известны.
Пути заданы жестко, поэтому и требовалось распаковать архив в строго определенный каталог.
Командный файл для упрощения запуска
Когда вам надоест каждый раз набирать три команды для трансляции и запуска программ, создайте такой командный файл (назвать его можно, например, mkr.bat — то есть make/run):
Использовать его можно будет следующим образом:
Несколько комментариев по устройству этого командного файла:
Команда @echo off отключает дублирование каждой исполняемой команды в окне командной строки.
Аргумент /nologo при вызове ассемблера и компоновщика убирает строчку “Copyright (C) Microsoft”, захламляющую экран.
%1 меняется на аргумент, который передан командному файлу, то есть имя программы на ассемблере (выше — hello.asm ).
n1 меняется на тот же аргумент, но без расширения (выше — hello ).
Связка && выполняет очередную команду, только если предыдущая завершилась успешно. В случае ошибок трансляции ваша программа запущена не будет.
То, что получилось в итоге — это простейшая система программирования, состоящая из транслятора (ассемблера MASM), текстового редактора (Notepad2 или иного, если вы его предпочли) и примитивной системы сборки на единственном командном файле.
Несмотря на простоту этой системы, она основывается на тех же общих принципах, что и более сложные системы программирования. Подробнее с этим вы сможете познакомиться на втором курсе.
Источник
MASM для x64 (ml64.exe)
Visual Studio включает 32-разрядную и 64-разрядную версию Microsoft Assembler (MASM) для целевого кода x64. Именованный ml64.exe — это ассемблер, который принимает язык ассемблера x64. программы командной строки MASM устанавливаются при выборе рабочей нагрузки C++ во время установки Visual Studio. Средства MASM недоступны для загрузки отдельно. инструкции по загрузке и установке копии Visual Studio см. в разделе install Visual Studio. если вы не хотите устанавливать полнофункциональную интегрированную среду разработки Visual Studio, но вам нужны только программы командной строки, скачайте средства сборки для Visual Studio.
Чтобы использовать MASM для построения кода для платформ x64 в командной строке, необходимо использовать командную строку разработчика для целевых платформ x64, которые задают требуемый путь и другие переменные среды. Сведения о запуске командной строки разработчика см. в разделе Сборка кода C/C++ в командной строке.
сведения о ml64.exe параметров командной строки см. в разделе справочник по ML и ML64 Command-Line.
Встроенный ассемблер или использование ключевого слова ASM не поддерживается для целевых объектов x64 и ARM. Чтобы перенести код x86, использующий встроенный ассемблер для x64 или ARM, можно преобразовать код в C++, использовать встроенные функции компилятора или создать файлы исходного кода на языке ассемблера. Компилятор Microsoft C++ поддерживает встроенные функции, позволяющие использовать специальные инструкции, например привилегированные, битовые сканирования и тестирования, взаимоблокировки и т. д., в качестве максимально близкого к кросс-платформенному способу. Сведения о доступных встроенных функциях см. в разделе встроенные функции компилятора.
добавление файла ассемблерного языка в проект Visual Studio C++
система проектов Visual Studio поддерживает файлы на языке ассемблера, созданные с помощью MASM в проектах C++. Вы можете создавать файлы исходного кода на языке ассемблера x64 и создавать их в объектных файлах с помощью MASM, который поддерживает 64-разрядную версию. Затем эти файлы объектов можно связать с кодом C++, созданным для целевых платформ x64. Это один из способов преодоления отсутствия встроенного ассемблера x64.
добавление файла ассемблерного языка в существующий проект Visual Studio C++
Выберите проект в обозревателе решений. в строке меню выберите Project, настройки сборки.
в строке меню выберите Project, добавить новый элемент.
Создайте код на языке ассемблера в добавленном ASM-файле. При сборке решения вызывается ассемблер MASM Assembler для сборки ASM-файла в объектный файл, который затем связывается с проектом. Чтобы упростить доступ к символам, объявите функции ассемблера как extern «C» в исходном коде C++ вместо использования соглашений об оформлении имен c++ в исходных файлах на языке ассемблера.
Директивы, относящиеся к ml64
В исходном коде на языке ассемблера, предназначенном для x64, можно использовать следующие директивы ml64:
Источник