본문 바로가기

Architecture for Software/.NET

MSIL 역어셈블러(ildasm.exe)로 Boxing 확인하기

.NET에 MSIL 역어셈블러(ildasm.exe)가 있어서 MSIL 코드들을 확인할 수 있습니다.
ILDasm.exe는 Intermediate Language Disassembler Utility입니다.

MSIL 역어셈블러는 .NET Framework에서만 실행될 수 있는 어셈블리이며, 어셈블리를 역으로 해석해주는 역어셈블러 프로그램이다.

간단하게 C#으로 작성된 코드의 내역중 Boxing이 수행된 내역을 MSIL을 통하여 확인해보겠습니다.
우선 다음과 같은 코드를 작성합니다.

간단하게 버튼을 하나 만들고 버튼에서 리스트에 1 ~ 100까지 출력하는 코드입니다.
        private void button3_Click(object sender, EventArgs e)
        {
            // Boxing이 일어나는 코드이다.
            for (int i = 0; i <= 100 ; i++ )
            {
                // 묵시적인 Boxing
                listBox1.Items.Add(i);
            }
        }

이를 컴파일 한 후 다음과 같은 경로로 이동합니다.

사용자 삽입 이미지

Visual Studio 2003 명령 프롬프트를 실행합니다.

사용자 삽입 이미지

명령 프롬프트에서 ildasm을 실행합니다.

실행된 MSIL 역어셈블러에서 컴파일된 PE파일을 열면 다음과 같이 나옵니다.

사용자 삽입 이미지

아까 button3를 더블클릭하여 보면 PE 파일로부터 MSIL 코드를 추출할 수 있습니다.


만약 다음과 같은 코드를 MSIL 역 어셈블러에서 살펴본다면 같은 코드로 나올 것입니다.
            ArrayList al = new ArrayList();
            al.Add(button1);
            al.Add(button2);
            al.Add(button3);
            al.Add(button4);
            al.Add(button5);

            Button btn = (Button)al[2];
            btn.BackColor = Color.Red;

            foreach (Button b in al)
            {
                b.BackColor = Color.Green;
            }

            IEnumerator ie = al.GetEnumerator();
            while (ie.MoveNext())
            {
                Button btn2 = (Button)ie.Current;
                btn2.BackColor = Color.Blue;
            }

'Architecture for Software > .NET' 카테고리의 다른 글

C#의 Value Type과 Reference Type  (0) 2008.08.26