[Atelier Blue アトリエブルー]Homeプログラミング IL(CIL,MSIL)>基本事項

基本事項

とりあえずは基本事項を確認しようと思います。といっても現時点で分かることはあんまり無いのですが。

コメント

どうやら、C風のコメントが使えるようです。「//」と「/**/」両方使えます。カンマやセミコロンは使えないようです。

エントリポイント

エントリポイントは特定の名前である必要は無いようです。そのメソッド内に「.entrypoint」と書けばOKです。場所はどこでも問題ないようですが、先頭に書くのが分かり易くて良いでしょう。

assembly

「assembly」をしっかりと宣言しないと実行時にエラーがでます(コンパイルは通ります)。名前は適当で良いのでしっかりと宣言しましょう。

クラスとの関係

ソースコードを読むとどうやら、クラスはなくても良いようです。確実なことは言えませんがクラス無しでもメソッドはメソッドのようです。

どういう仕組みか確認

したのソースをアセンブリし、その後逆アセンブルしてみましょう。

.assembly extern mscorlib {} /*入れても入れなくても良い。*/
.assembly hello {}

.method static public void main() cil managed
{
    .entrypoint
    ldstr "Hello world!"
    call void [mscorlib]System.Console::WriteLine(class System.String)
    ret
}

逆アセンブル後

//  Microsoft (R) .NET Framework IL Disassembler.  Version 1.1.4322.573
//  Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.

.assembly extern mscorlib
{
  .ver 0:0:0:0
}
.assembly hello
{
  .ver 0:0:0:0
}
.module hello2.EXE
// MVID: {FE208837-51D6-4A66-89C4-96AA076892F2}
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x00d90000

// =============== GLOBAL FIELDS AND METHODS ===================

//Global methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.method public static void  main() cil managed
{
  .entrypoint
  // コード サイズ       11 (0xb)
  .maxstack  8
  IL_0000:  ldstr      "Hello world!"
  IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000a:  ret
} // end of global method main


// =============================================================

//*********** 逆アセンブリが完了しました ***********************

どうやら、グローバルフィールドなる物が存在するようです。これなかなか良いかもしれないです。

と、1つ分かったこと。グローバルフィールドのメソッドには自動でスタティック属性がつくらしい。まあ、インスタンスがないんだから当然なのかもしれない。


ページの一番上へ
前のページへ一覧に戻る 次のページへ
初版2006-4-5
[Atelier Blue アトリエブルー]Homeプログラミング IL(CIL,MSIL)>基本事項