Visual studio 2018 for windows desktop express: Add-in Express for Office and .net (for Visual Studio Express)

Курсы онлайн-обучения Visual Studio Express

  1. Все темы

Присоединяйся сейчас

Программирование сборки с помощью 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, но программисты .