2017-01-10 7 views
1

チャック。masm32パケットなしの記号名を使用

私は現在、アセンブリ言語のarkaneの技術を学んでいます。

(Windows 8.1の)ダイアログボックスを表示するプログラムを作成しました。 msdn参照をチェックして、ダイアログボックスのオプティクスと動作を変更する方法を見つけました。私は戻り値がどこに格納され、どのようにそれを読むかを学びました。だから私の質問は、「私が立ち往生しているのを助ける」という種類のものではない。この小さなダイアログボックスプログラムで

ルック:

.386 
.model   flat, stdcall 
includelib  "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\user32.lib" 
includelib  "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib" 

MessageBoxA  PROTO :DWord, :DWord, :DWord, :DWord 
ExitProcess  PROTO :DWord 

.data 
Caption   db "Masm shizzle",0 
Text   db "Click OK my friend",0 

.code 
start: 
       push 11h 
       push OFFSET Caption 
       push OFFSET Text 
       push 0 
       call MessageBoxA 

       push 0 
       call ExitProcess 
end start 

これは魅力のように働いた、と私はパラメータがスタックに発注する必要がある方法を考え出しました。
私は、コードを改善し、より読みやすく、きれい作ってみましたので、私はダウンに.CODEセクションを壊した:

.code 
start: 
       invoke MessageBoxA, 0, addr Text, addr Caption, 11h 
       invoke ExitProcess, 0 
end start 

そして私はあなたのコードをさらに読みやすくする可能性が発表されたWebページ上でつまずい"windows.inc"の助けを借りて象徴的な名前を使用してください。 functionA(ANSI)を書く必要がないと言われました。

だから、呼び出しコールは、次のようになります。

invoke Messagebox, NULL, addr Text, addr Caption, MB_ICONINFORMATION 

問題は「windows.inc」から、より具体的には、これらのシンボリック名は、MASM32パッケージからであるということです。
私は基本的にmasm32を使用しているわけではありませんが、使用できるVisual Studioがインストールされている "standart" Windowsホストに同等のファイルがあるかどうかを知りたいと思います。
リモートmashineでこのコードを実行(またはコンパイル)したい場合は、ホストにmasm32がインストールされていると仮定することができませんでした。 (私はそれを理解し、または私はそれをプリコンパイルならば、それは実行可能ファイルにパックされて?)

ことがMASM32なしでは不可能であれば、私はシンボリック名のライブラリを記述する必要があると思います....

+0

'windows.inc'ファイルのみ、それが実行されると、コードは、いない組み立てられたときに存在する必要がありますあなたが使用できることをやった後

。また、エンドユーザーがコードを再コンパイルする場合は、MASM32が必要になります。 (または、互換性のあるサードパーティのアセンブラですが、そのようなアセンブラはインクルードファイルの独自のバージョンを提供する必要があります)。したがって、私はあなたに問題があるとは思わない。 –

+0

ありがとうございました。だから、私は必要なはずのすべてのバージョンをプリコンパイルするだけだと思う​​。完了のために、このファイルに相当するマイクロソフトはありますか? – clockw0rk

+0

実際、私はMASM32がサードパーティのパッケージであることに気づいていませんでした。マイクロソフトと同等のものがあるかどうかはわかりませんが、恐らくそうではありません。ライセンスに応じて、関連するコンテンツをソースコードに直接コピーすることができます。 –

答えて

1

MASM32 package by Hutch from hereを入手できます。
これらの問題を処理するのはずっと簡単な方法です。

in this threadのように、ANSI/UniCodeの状況も処理します。あなたは

MessageBoxA PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD 

のようなANSIバージョンを使用したい場合に行うには、さらに何もありませんそして、あなたはUnicode版

MessageBoxW PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD 

にあなたを使用したい場合だろうと思い、このパッケージを使用して

ファイルの先頭(インクルード前)に、

__UNICODE__ EQU true ; or any other way of defining the __UNICODE__ define 

を定義する必要があります。両方のケースで - - 次の行を

invoke MessageBox, 0, addr Text, addr Caption, 11h 
関連する問題