|開発環境|Microsoft Visual Studio Express 2013 for Windows Desktop| |実行環境|Microsoft Windows 8.1 (64bit)| |プロジェクトの種類|Visual C++/Win32 プロジェクト| |プロジェクト名|hello| |アプリケーションの種類|Windows アプリケーション| |追加のオプション|空のプロジェクト, SDLチェック| #table_zebra(project, #fff, #ddd) 参考 -[[Win32 MASM プログラミング入門>http://www7.plala.or.jp/keny01/asm/win32/index.html]] *プロジェクトの新規作成 -メニューから「ファイル」→「新しいプロジェクト」を選択する -「Win32 プロジェクト」を選択する -名前を入力する「hello」 -「ソリューションのディレクトリを作成」のチェックを外す -「空のプロジェクト」をチェックする -「Security Development Lifecycle (SDL) チェック」はチェックしたままでいい *ビルドのカスタマイズ -「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「ビルド依存関係」→「ビルドのカスタマイズ」を選択する -「masm(.targets, .props)」をチェックする *ソースファイルの追加 -「ソリューション エクスプローラー」の「ソース ファイル」を右クリックし、ポップアップメニューから「追加」→「新しい項目」を選択する -「C++ ファイル (.cpp)」を選択する -名前を入力する「hello.asm」 ビルドのカスタマイズの前にソースファイルを追加した場合 -「ソリューション エクスプローラー」の「hello.asm」を右クリックし、ポップアップメニューから「プロパティ」を選択する -項目の種類に「Microsoft Macro Assembler」を選択する *ソースの入力 hello.asm #highlight(asm){{ ; hello.asm .386 .model flat, stdcall option casemap:none NULL equ 0 MB_OK equ 0 MessageBoxA proto :dword, :dword, :dword, :dword ExitProcess proto :dword .data caption db 'ハロー', 0 text db 'hello, world', 0 .code start: invoke MessageBoxA, NULL, offset text, offset caption, MB_OK invoke ExitProcess, 0 end start }} #region #highlight(asm){{ ; hello.asm .586 .model flat, stdcall NULL EQU 0 MB_OK EQU 0 MessageBoxA proto :dword, :dword, :dword, :dword ExitProcess proto :dword .data CAPTION DB 'ハロー', 0 TEXT DB 'hello, world', 0 .code WinMainCRTStartup proc invoke MessageBoxA, NULL, offset TEXT, offset CAPTION, MB_OK invoke ExitProcess, 0 ret WinMainCRTStartup endp end }} #endregion *ビルド -ツールバーのソリューション構成に「Release」を選択する -メニューから「ビルド」→「ソリューションのビルド」を選択する(F7キーでも可) エラー一覧 |||説明|ファイル|プロジェクト|h |エラー|1|error LNK2026: モジュールは SAFESEH イメージには安全ではありません。|C:\Projects\[[ASM]]\hello\hello.obj|hello| |エラー|2|error LNK1281: SAFESEH イメージを生成できません。|C:\Projects\ASM\hello\Release\hello.exe|hello| **プロジェクトの設定 -「ソリューション エクスプローラー」の「hello」を右クリックし、ポップアップメニューから「プロパティ」を選択する #table_zebra(error, #fff, #ddd) |ツリー|構成|項目|値|h |構成プロパティ/リンカー/詳細設定|Release|安全な例外ハンドラーを含むイメージ|いいえ (/SAFESEH:NO)| |構成プロパティ/リンカー/最適化|Release|[[リンク]]時のコード生成|規定(または空)| |構成プロパティ/リンカー/マニフェスト ファイル|Release|マニフェストの生成|いいえ (/MANIFEST:NO)| |構成プロパティ/リンカー/デバッグ|Release|デバッグ情報の生成|いいえ| #table_zebra(property, #fff, #ddd) ---- 「Win32 コンソール アプリケーション」で作った場合 -「構成プロパティ/リンカー/システム」のサブシステムが「コンソール (/SUBSYSTEM:CONSOLE)」となる -同時にデフォルトのエントリポイントが「mainCRTStartup」となる エントリポイントを変更したい場合は「構成プロパティ/リンカー/詳細設定」の「エントリ ポイント」で指定する END疑似命令で実行開始アドレス(エントリポイント)を定義することもできる