본문 바로가기

Programming Language/MSIL

MSIL로 닷넷 프로그램 작성하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 C#, VB.NET, J#, F#, C++/CLI, Delphi.NET 등등의 닷넷 프레임워크에서 사용되기 위한 언어는 중간언어(MSIL: Microsoft Intermediate Language)로 번역이 됩니다. 이 바이너리를 실행하는 순간 해당 CPU에 맞는 명령어들로 한번 더 번역이 되는 것이죠. MSIL은 어셈블리어보다는 심플합니다. 명령어의 수도 몇 개 되지 않고 소스 코드도 C언어와 비슷한 형태를 띱니다.

// 파일명: test.il

/* 닷넷의 기본 클래스들이 정의된 mscorlib를 참조해 쓰겠다는 부분입니다. */
.assembly extern mscorlib
{
}

/* 이 어셈블리(= exe파일 또는 dll파일)의 이름은 Test입니다. */
.assembly Test
{
	/* 어셈블리의 버전은 1.0.0.0입니다. */
	.ver 1:0:0:0
}

/* 이 어셈블리의 내부 이름은 test.exe입니다. */
.module test.exe

/* 반환값이 없는 main이라는 이름의 정적 메서드를 선언합니다. */
/* 이 함수는 CLR에 의해 메모리가 관리됩니다. */
.method static void main() il managed
{
	/* 이 어셈블리를 실행할 때 진입점 역할을 함을 따로 명시해야 합니다.*/
	.entrypoint
	/* 메서드마다 스택의 크기를 명시해야 합니다. 적당한 값을 기입하면 됩니다. */
	.maxstack 16

	/* System.Console.WriteLine("Hello, World!"); */
	/* "Hello, World!"라는 문자열이 적재된 메모리의 주소를 스택에 push합니다. */
	ldstr "Hello, World!"
	/* System.String 자료형을 매개변수로 받는 WriteLine 메서드를 호출합니다. */
	call void [mscorlib]System.Console::WriteLine(class System.String)
	/* 또는 call void [mscorlib]System.Console::WriteLine(string) 이라 해도 동일합니다. */

	ret // 메서드의 끝입니다.
}

 작성한 파일을 바이너리로 만들기 위해서는 Visual Studio 개발자 명령 프롬프트를 사용합니다. 시작메뉴에서 Visual Studio Tools를 보면 해당 프롬프트의 바로가기가 있습니다. 이를 클릭합니다.



 아래와 같이 입력하여 MSIL 소스코드를 바이너리로 어셈블합니다.

ilasm /EXE test.il

 test.exe가 생성된다고 메시지가 출력됩니다. 어셈블이 완료된 후 test.exe를 실행하면 Hello, World! 문장이 출력됨을 알 수 있습니다.



'Programming Language > MSIL' 카테고리의 다른 글

MSIL로 입출력하기 및 박싱/언박싱  (0) 2014.07.27
MSIL의 기본 자료형  (0) 2014.07.27