logo

CIL 또는 MSIL | Microsoft 중간 언어 또는 공통 중간 언어

CIL(Common Intermediate Language)이라고도 하는 MSIL(Microsoft Intermediate Language)은 플랫폼 독립적이며 소스 코드에서 언어별 컴파일러에 의해 생성되는 명령 집합입니다. MSIL은 플랫폼 독립적이므로 Windows와 같은 공용 언어 인프라 지원 환경에서 실행될 수 있습니다. .그물 실행 시간.
MSIL은 JIT 컴파일러에 의해 특정 컴퓨터 환경별 기계어 코드로 변환됩니다. 이 작업은 MSIL이 실행되기 전에 수행됩니다. 또한 MSIL은 요구 사항에 따라 기계어 코드로 변환됩니다. 즉, JIT 컴파일러는 MSIL 전체가 아닌 필요에 따라 MSIL을 컴파일합니다.

CLR(공용 언어 런타임)의 실행 프로세스: MSIL 생성과 JIT 컴파일러에 의한 MSIL을 기계어 코드로 변환하는 과정을 포함하는 실행 프로세스는 다음과 같습니다.



MSIL 또는 CIL

base64 자바스크립트 디코드
  • 소스 코드는 CLR의 컴파일 타임에 언어별 컴파일러에 의해 MSIL로 변환됩니다. 또한 MSIL과 함께 메타데이터도 편집 시 생성됩니다. 메타데이터에는 코드 유형의 정의 및 서명, 런타임 정보 등과 같은 정보가 포함됩니다.
  • CLI(공용 언어 인프라) 어셈블리는 MSIL을 어셈블하여 생성됩니다. 이 어셈블리는 기본적으로 보안, 배포, 버전 관리 등에 사용되는 컴파일된 코드 라이브러리이며 프로세스 어셈블리(EXE)와 라이브러리 어셈블리(DLL)의 두 가지 유형이 있습니다.
  • 그런 다음 JIT 컴파일러는 MSIL(Microsoft Intermediate Language)을 JIT 컴파일러가 실행되는 컴퓨터 환경과 관련된 기계어 코드로 변환합니다. MSIL은 요구 사항에 따라 기계어 코드로 변환됩니다. 즉, JIT 컴파일러는 MSIL 전체가 아닌 필요에 따라 MSIL을 컴파일합니다.
  • JIT 컴파일러를 사용하여 얻은 기계어 코드는 컴퓨터 프로세서에 의해 실행됩니다.

예: MSIL은 아래 제공된 소스 코드에서 언어별 컴파일러에 의해 생성됩니다. MSIL을 자세히 이해하려면 다음을 인쇄하는 Demo 클래스가 포함된 간단한 C# 소스 코드를 참조하세요. techcodeview.com 다음과 같이 주어진다:








using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }>

>

>

junit 테스트 케이스

위에 제공된 코드에 대해 C# 컴파일러에서 생성된 MSIL은 다음과 같습니다.

 // =============== CLASS MEMBERS DECLARATION =================== .class public auto ansi beforefieldinit Demo extends [mscorlib]System.Object { .method public hidebysig static void Main() cil managed { // .maxstack 8 IL_0000: nop IL_0001: ldstr 'techcodeview.com' IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Demo::Main .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } // end of method Demo::.ctor } // end of class Demo // =============================================================>

위의 MSIL에는 1바이트 또는 2바이트 길이의 opcode가 있습니다. 다른 모든 클래스가 상속되는 기본 클래스 선언은 mscorlib.dll . Main() 메서드에서 명령은 ldstr 문자열을 로드합니다 techcodeview.com 스택에. 그러면 정적 시스템.콘솔.쓰기라인 함수가 호출되고 문자열이 스택에서 팝됩니다. 마지막으로 ret 명령어는 함수 호출의 끝을 알립니다.
그런 다음 .ctor( ) 문은 Demo 클래스에 대한 매개 변수가 없는 기본 생성자를 의미합니다. 이 생성자는 비정적 클래스 Demo에 대해 컴파일러에 의해 자동으로 생성됩니다. 호출 명령어는 기본 개체 생성자를 전달하고 ret 명령어는 함수 호출의 끝을 알립니다.