Visual studio 2018 for windows desktop express: Add-in Express for Office and .net (for Visual Studio Express)
Курсы онлайн-обучения Visual Studio Express
- Все темы
Присоединяйся сейчас
Программирование сборки с помощью Visual Studio.
NET
MASM поддерживается Microsoft и представляет собой ассемблер x86, использующий синтаксис Windows и Intel для создания исполняемого файла COFF. Он совместим как с 16-битными, так и с 32-битными источниками. К счастью, Microsoft Visual Studio IDE поддерживает задачи программирования MASM, просто внеся пару изменений в свойства проекта. Главной целью этой статьи является представление мощности ассемблерного кода с точки зрения скорости и полного контроля над программами, которые обычно не встречаются в других языках программирования. Несмотря на то, что существует множество редакторов и программного обеспечения для самостоятельного выполнения такой задачи, начинающие системные программисты или программисты по безопасности, которые до сих пор ограничены только программной IDE .NET, могут войти в реальный мир системного программирования, используя не что иное, как визуальное представление. студийная среда разработки.
Предварительное условие
В этой статье мы получили представление о создании как EXE, так и DLL с помощью MASM в Visual Studio. Таким образом, новички должны иметь краткое представление об этих технологиях:
- Visual Studio 2010 или более поздняя версия
- MASM (Microsoft Macro Assembler) Библиотека SDK
- Базовая компетенция в области кодирования сборки
- VС++
[скачать]
Разработка EXE с использованием MASM
Мы продемонстрируем программирование на ассемблере, создав простой исполняемый файл Windows, который обычно показывает «Hello World!» в окне сообщения в момент его инициирования. Сделать такую реализацию очень сложно, потому что Visual Studio 2010 IDE не предлагает явных шаблонов для написания ассемблерного кода, таких как языки программирования C#, VC++ и VB.NET. На самом деле у него есть встроенная опция для компиляции или запуска ассемблерных программ.
Открытие нового проекта
Нам нужно будет создать решение проекта VC++, которое позже будет сопровождаться файлом ассемблерного кода. Следовательно, откройте Visual Studio и выберите Пустой проект типа шаблона VC++. Нет необходимости создавать подкаталог для этого пустого решения, поэтому снимите соответствующий флажок следующим образом:
После создания решения test_masm типа VC++ перейдите в обозреватель решений и щелкните правой кнопкой мыши, чтобы выбрать Настройка сборки следующим образом:
Параметры настройки сборки открывают параметры компилятора MASM, которые по умолчанию снимаются. Это ключевой параметр, который необходимо включить для редактирования и компиляции файла исходного кода сборки.
Код сборки
Как мы уже говорили ранее, VS 2o1o не предоставляет шаблоны файлов сборки, однако выберите проект в обозревателе решений и щелкните правой кнопкой мыши, чтобы добавить текстовый файл, который будет иметь *.ASM расширение следующим образом:
Теперь в наше решение test_masm добавлен пустой файл text. asm. Откройте его и вставьте следующий ассемблерный код, отвечающий за отображение окна сообщения, следующим образом:
[c]
.386 ; Указывает MASM использовать набор инструкций Intel 80386.
.модель плоская, stdcall ; Модель с плоской памятью
option casemap:none ; Считать метки регистрозависимыми
include masm32includewindows.inc
include masm32includekernel32.inc
includelib masm32libkernel32.lib
include masm32includeuser32.inc
includelib masm32libuser32. библиотека
.данные; Начало инициализированного сегмента данных
MsgBoxCaption db «Программирование на ассемблере Win32», 0
MsgBoxText db «Hello World!!! Добро пожаловать в ASM-программирование под CLR», 0
.код ; Начало кода
начало: ; Точка входа кода
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end start
[/c]
Файл ассемблерного кода написан, но будьте терпеливы, он не готов к компиляции или выполнить, потому что некоторые важные настройки проекта все еще остаются.
Обязательные конфигурации проекта
Успешное выполнение файла ассемблерного кода в Visual Studio IDE зависит от файла внешней библиотеки, который будет доступен в MASM SDK. Следовательно, выберите проект Свойства , щелкнув его правой кнопкой мыши в обозревателе решений. Здесь выберите General , расширив Linker и в Additional Library Directorys , вставьте путь include, lib и макросов каталогов следующим образом:
Затем перейдите к Секция ввода в компоновщике и укажите ссылку на файл masm32.lib в качестве дополнительных зависимостей:
Для такой манипуляции не требуется генерировать файл манифеста, поэтому отключите его следующим образом:
Теперь перейдите в Система из компоновщика и установите Windows в разделе подсистема следующим образом:
Наконец, настройте точку входа кода как начало от опции Advanced в компоновщике , которая определяет поток выполнения кода. Мы можем определить точку входа файла ASM из .код раздел.
Теперь перейдите в раздел Microsoft Macro Assembly из свойств решения, которое появляется в тот момент, когда мы добавляем файл сборки в каталог решения, иначе он будет скрыт. Здесь задайте имя каталога, в котором ранее был установлен MASM SDK, следующим образом:
Наконец, все готово и решение скомпилировано. Если вся конфигурация верна, то в папке Debug решения создается файл test_masm.exe .
Тестирование и отладка
Пришло время протестировать исполняемый файл. При нажатии на исполняемый файл «Hello World!» окно сообщения будет выглядеть следующим образом:
Мы можем даже отладить ассемблерный код, вставив точку останова в качестве определенного места, и через окно «Регистр» в меню «Отладка» мы можем наблюдать за всеми регистрами ЦП с соответствующими флагами следующим образом :
Расширенную отладку приложения мы рассмотрим в следующих статьях. На следующем изображении показан ассемблерный код в режиме отладки, который помогает нам понять, что происходит за кулисами.
Хотя этот раздел не имеет отношения к этой статье, а просто для ознакомления, мы можем дизассемблировать любой файл C++ до соответствующего кода ASM. В интегрированную среду разработки Visual Studio встроен параметр Disassembly, который очень полезен для обнаружения ошибок во время выполнения, таких как переполнение буфера в коде, путем преобразования файла исходного кода в файл кода сборки следующим образом:
Разработка DLL с использованием MASM
В предыдущем разделе мы увидели, как создать EXE-файл с помощью MASM с VS 2o10. Мы также можем разработать библиотеку (DLL) с помощью программирования MASM, аналогичного другим технологиям, таким как C#, VB и C++. Следовательно, этот метод можно использовать в другом клиентском приложении в этой созданной библиотеке DLL. Процедура создания DLL почти такая же, как и EXE, но требует тонкой настройки. Во-первых, мы должны установить тип конфигурации как DLL в разделе «Общие», потому что сейчас мы имеем дело с DLL. Такая модификация может происходить из свойств решения, таких как:
И, как мы все знаем, файлы DLL — это библиотеки, которые содержат определения методов. Точка входа обычно отсутствует в файле DLL. Следовательно, мы должны изменить этот параметр следующим образом:
Наконец, добавьте текстовый файл masmlib с расширением ASM в решение, как и ранее, и поместите следующий код, который обычно содержит метод тестирования, который будет отображать некоторые предупреждения во время загрузка и выгрузка DLL в клиентской программе следующим образом:
[обычный]
include masm32includemasm32rt.inc
.data
dLoading BYTE «HELLO, DLL загружается…..», 0
dUnloading BYTE «DLL выгружается.???????», 0
dOrdinal БАЙТ «До свидания», 0
.data?
hInst DWORD ?
.code
testingMethod proc hInstDLL:DWORD, fdwReason:DWORD, lpvReserved:DWORD
. if fdwReason == DLL_PROCESS_ATTACH
вызывать MessageBox, HWND_DESKTOP, смещение dLoading, NULL , MB_OK
push hInstDLL
pop hInst
mov eax, TRUE
ret
.elseif fdwReason == DLL_PROCESS_DETACH
вызывать MessageBox, HWND_DESKTOP, смещение dUnloading, NULL, MB_OK
.elseif fdwReason == DLL_TH READ_ATTACH
.elseif fdwReason == DLL_THREAD_DETACH
.endif
ret
testingMethod endp
ProcByOrdinal proc
invoke MessageBox, NULL, offset dOrdinal, NULL, NULL
ret
ProcByOrdinal endp
end testingMethod
[/plain]
Наконец, скомпилировать эта программа и test_masm_dll. Файл DLL будет создан в папке Debug, на которую можно ссылаться в программе C++ или в самой клиентской программе MASM.
Итак, мы увидели, как создавать файлы EXE и DLL с помощью языков программирования MASM, используемых в Visual Studio IDE. Фактически, такая задача может быть решена с помощью жесткого MASM SDK, но программисты .