前回は時計を作成ました。
今回は、プログラムの動作について、いろいろと調査していきたいと思います。
時計アプリケーションは、プロジェクトとして、「Windowsフォームアプリケーション(.NET Framework)」を選択して作成しました。
これは、「.NET Framework」を使用したプログラムです。
.NET Frameworkとは何でしょうか?
Docsより「.NET Framework は、実行中のアプリにさまざまなサービスを提供する、Windows 向けのマネージド実行環境です。」と書いてあります。(ちなみにこれはマイクロソフトが開発したものです。)
今回のプログラムは、.NET Frameworkという環境で実行されます。
ですので、プログラムを実行するためには、.NET Frameworkが必要となります。
では、すべてのプログラムには.NET Frameworkを必要なのでしょうか?
例えば、WindowsのOS機能を直接利用するプログラムを書く場合は、.NET Frameworkを利用する必要はありません。
今回.NET Frameworkを利用した理由は、
C#という言語は、.NET Frameworkを利用するために作られた言語である
ということからです。
次に.NET Frameworkの構成については、
Docsでは、「実行中のアプリを処理する実行エンジンである共通言語ランタイム (CLR) と、開発者が独自のアプリから呼び出すことができる検証済みの再利用可能なコード ライブラリである .NET Framework クラス ライブラリから構成されています。」と記述されています。
では、初めの「実行中のアプリを処理する実行エンジンである共通言語ランタイム (CLR)」とは何でしょうか?
通常は、プログラムをコンパイルすると、プログラムはコンピュータが直接実行できる機械語に変換されます。
ところが、.NET Frameworkでは、共通中間言語 (CIL: Common Intermediate Language)と呼ばれるものに変換されます。これはコンピュータで直接実行できません。
これを実行するのが実行エンジンである共通言語ランタイム (CLR:Common Language Runtime)です。
CLRがCILを機械語に翻訳してコンピュータで実行します。
次の「開発者が独自のアプリから呼び出すことができる検証済みの再利用可能なコード ライブラリである .NET Framework クラス ライブラリから構成されています。」というのはどういうことでしょうか。
端的に言えば、開発者が一からプログラムを作成しなくても、クラスライブラリ(クラスを集めたもの)を利用できるということです。
アプリを作成するのに便利なクラスが豊富に用意されています。
ですので、開発者の負担が減ります。
それでは、CILを見てみたいと思います。
CIL自体はバイナリコード(2進数であらわされたコード)ですので読めませんので、逆アセンブルします。
(逆アセンブルというのは、人が読めないコード(CIL)を、人が読めるコードに変換することをいいます)
なお、変換するアプリを逆アセンブラーといいます。
実際に行ってみます。
それには、IL 逆アセンブラーというツールが必要となります。
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools
のフォルダ内にildasm.exeというファイルがありますので、これを実行します。
起動したら、ファイルでWindowsFormsApp1.exeを開きます。
ここで、WndowsFormsApp1→WindowsFormsApp1.Program→Main:void()
をダブルクリックで開いてみましょう。
ウィンドウが表示されます。
ここに表示されている。
「IL_0000: nop」の「nop」が仮想機械で実行する命令となります。
CILの仕様を確認します。
CILの仕様については、Standard ECMA-335
で、ECMA-335.pdf を開きますします。
P403で「Nop」命令の説明が記述されます。何もしない命令です。
このように、CLIについて調べることができます。
では、ildsam.exeを閉じます。
今回は.NET Frameworkについて、少し説明をしました。