トップページ⇒tech
41コメント12KB

MSILプログラミングスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ひたすら手打ちでがんばるスレ
0002デフォルトの名無しさんNGNG
MicroSoft Interpreter Language
0003デフォルトの名無しさんNGNG
いい加減MSILって言い方やめれ。
ISO標準のCILだ。
0004デフォルトの名無しさんNGNG
MicroSoft Itte-yoshi Language
0005最凶VB厨房NGNG
インてリジェンッならングウィッジ
0006デフォルトの名無しさんNGNG
CIL って何の略?
0007デフォルトの名無しさんNGNG
早く誰かHellowolrdの手打ちして
0008デフォルトの名無しさんNGNG
>>7 手打ちって何?
0009デフォルトの名無しさんNGNG
>>8
1に聞け
0010デフォルトの名無しさんNGNG
なんだよ、ニーモニック直うちのことかよ。
それともハンドアセンブルまでやらせるのかよ。

それはそうと、CILって何の略?
0011デフォルトの名無しさんNGNG
>>10
機械語チョクウチ
0012デフォルトの名無しさんNGNG
なんだよ、1 は立て逃げかよ

MSIL (Microsoft Intermediate Language)
CLR (Common Language Runtime)
CIL (Common Intermediate Language)
CLI (Common Lanuage Infrastructure)
FCL (Framework Class Library)

IL のコンパイラの作り方でも説明してくれよ
サンプルだけじゃよくわかんねぇよヽ(`Д´)ノ
0013デフォルトの名無しさんNGNG
MFC(Microsoft Foundation Class)
WFC(Windows Foundation Class)
FCT(Football Club Tokyo)
0014デフォルトの名無しさんNGNG
>>11 Z80しかできねーよ。
0015デフォルトの名無しさんNGNG
class hellworld{
public static void Main(){
System.Console.WriteLine("HELL >>1");
}
}

↓

.class private auto ansi beforefieldinit hellworld
extends [mscorlib]System.Object
{
.method public hidebysig static void Main() cil managed
{
.entrypoint
// コード サイズ 11 (0xb)
.maxstack 1
IL_0000: ldstr "HELL >>1"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000a: ret
} // end of method hellworld::Main

.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// コード サイズ 7 (0x7)
.maxstack 1
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method hellworld::.ctor

} // end of class hellworld
0016デフォルトの名無しさんNGNG
【Console::WriteLineの実装】

.method public hidebysig static void WriteLine(string 'value') cil managed
{
// コード サイズ 12 (0xc)
.maxstack 8
IL_0000: call class System.IO.TextWriter System.Console::get_Out()
IL_0005: ldarg.0
IL_0006: callvirt instance void System.IO.TextWriter::WriteLine(string)
IL_000b: ret
} // end of method Console::WriteLine
↓
【System.IO.TextWrite】
.method public hidebysig newslot virtual
instance void WriteLine(string 'value') cil managed
{
// コード サイズ 123 (0x7b)
.maxstack 6
.locals (int32 V_0,
int32 V_1,
char[] V_2)
IL_0000: ldarg.1
IL_0001: brtrue.s IL_000a
IL_0003: ldarg.0
IL_0004: callvirt instance void System.IO.TextWriter::WriteLine()
IL_0009: ret
IL_000a: ldarg.1
IL_000b: callvirt instance int32 System.String::get_Length()
IL_0010: stloc.0
IL_0011: ldarg.0
IL_0012: ldfld char[] System.IO.TextWriter::CoreNewLine
0017デフォルトの名無しさんNGNG
IL ディスアセンブラの結果を載せるんじゃなくて、ニーモニック表きぼん

と、言ってみるテスト
0018デフォルトの名無しさんNGNG
>17
Ilasm.exe を使えよ
0019デフォルトの名無しさんNGNG
結局、 >>1 はどこ逝ったのかね

.assembly extern mscorlib {}
.assembly hello {}
.module hello.exe

.class private auto ansi HelloWorld
extends [mscorlib]System.Object
{
  .method public hidebysig static void Main() il managed
  {
    .entrypoint
    .maxstack 8
      ldstr "Hello CIL to 2ch world!"
      call void [mscorlib]System.Console::WriteLine(string)
      ret
  }
}

むしゃくしゃしてサンプルをほとんどそのまま書いた
hello.il って名前で保存して

ilasm /exe hello.il

ってやると、実行可能な hello.exe ができる
あまり反省していない
0020デフォルトの名無しさんNGNG
>>17
http://www.ecma-international.org/publications/standards/Ecma-335.htm
0021デフォルトの名無しさんNGNG
>20
thx
IL のキーワード一覧とか見あたらないから、助かった

最近はMSもおとなしくなったな。ちゃんと標準化団体を通して文句を言われないように
するところとか
0022デフォルトの名無しさんNGNG
結局、死亡スレか
だが、実際、MSIL をちまちま書くよりも、.Net Framework のサンプルにあるように一度
C# あたりで書き直して、CSharp.Compiler を使った方が楽なんだよなぁ
0023デフォルトの名無しさんNGNG
JVMってアセンブラないの?
0024デフォルトの名無しさんNGNG
>23
JVM は Java 以外の言語で動くことは想定していないから、中間コードを必要としない
だから、いったん中間コードで吐いて最適化かけて、ということをしていない

アセンブラがない、っていうのがどういう意味かよくわからないが、Java の コンパイラは
ByteCode を直接出力すればいい。ByteCode のニーモニックについては、自分で
探してや
0025デフォルトの名無しさんNGNG
>>24
最初のパラグラフは何が言いたいのか良くわからんが、
昔は、JavaコンパイラがはくJava Byte Code自体がいまいちだったので、組み込みの世界ではJava Byte Codeの段階で人手で最適化したりした。

0026デフォルトの名無しさんNGNG
>25
>23 って、Java に MSIL に対応するものがないかって意味じゃないのか?
Java は別にCILで言語間を共通化する必要がないから、直接、ByteCode 出してる
だから JVM にとっての MSIL みたいなものはないぞといってるんだが

CLR では、各言語から IL が出た後に、もう一回、最適化かけてるけど、Java は言語に
依存してるから、最初からちゃんと最適化した ByteCode を出す努力してるだろう?
昔はいまいちだったんだろうけど、Sun もがんばって高速化してるわけだし
0027デフォルトの名無しさんNGNG
最適化云々は置いておくとして、JVMのバイトコード用の
アセンブラとかないの?見たことないんだけど。
Sunが許さないのかな。
0028デフォルトの名無しさんNGNG
>27
アセンブラ? 正直何を言っているのかよくわからん
かなり意味がないけど、自分で作ったら?
http://www.apache.org/~tetsuya/jakarta/bcel/manual.html
0029デフォルトの名無しさんNGNG
>>27
バイトコードアセンブラなら2、3種類ぐらいあったと思うけど。
0030デフォルトの名無しさんNGNG
Shujit あたりからJITコンパイラをぱちくるとか
・・・って、Java スレで聞いた方が親身になって教えてくれると思うぞ
よく考えると、ここは彼らの嫌いなM$すれだからな〜
0031デフォルトの名無しさんNGNG
>>26
なにを言っているのかよくわからん。ByteCode をはく高級言語は、Javaしかないが原理的には他の言語も作ることができる。
そもそも、いまのJavaVMの実装は、CLRと同じようにJITコンパイラになっているし、組み込みだとByteCode 自体を直接実行するCPUを使っている場合もある。
JITコンパイラの実装法の中には、IKVMのように、ByteCode をJITでMSILに変換(コンパイル)してそれをCLRで実行させるものも存在する。
0032デフォルトの名無しさんNGNG
>ByteCode をはく高級言語
結構あるような気がするが…MJのような拡張Javaだけでなく、Adaとかも
0033デフォルトの名無しさんNGNG
>>32
不勉強で申し訳ない。ほかにどんなのがあるんですか?
0034デフォルトの名無しさんNGNG
ゲイシの手のひらで遊んでいる内は知ることがないだろうけど、
Jythonとかそれなりの利用者がいるJavaバイトコードをはく高級言語はままあるわけなんだがな。
0035デフォルトの名無しさんNGNG
>>34
Jythonぐらいは、使ったことはなかったがしっていた。JRubyと同じようなものとおもっとった。
ほかにもたくさんありますし、一部普及しているものもあるようですね。勉強になりした。
いずれにせよ、JRE∽CLR, ByteCode∽IL と考えていいんですね。
0036デフォルトの名無しさんNGNG
>>34
Javaも、SunとIBMの手のひらの上というところは、似たようなもの。
0037デフォルトの名無しさんNGNG
バイトコードのアセンブラも知らないのか。
0038”管理”NGNG
 
0039デフォルトの名無しさんNGNG
フツーのx86の逆汗みたいにアドレスやHEXまで見せてくれる逆汗ないの?
0040デフォルトの名無しさんNGNG
>>39
ttp://www.gir-lab.com/pukiwiki/pukiwiki.php?PE%20Analyzer
0041デフォルトの名無しさんNGNG
MSILネイティブOSキタ━━━━(゚∀゚)━━━━ッ!!
http://pc5.2ch.net/test/read.cgi/os/1105442577/
■ このスレッドは過去ログ倉庫に格納されています