다음을 통해 공유


Ilasm.exe(MSIL 어셈블러)

업데이트: 2011년 4월

MSIL 어셈블러는 MSIL(Microsoft Intermediate Language)로 PE(이식 가능한 실행) 파일을 생성합니다. (MSIL에 대한 자세한 내용은 관리되는 실행 프로세스를 참조하십시오.) 이렇게 생성된 실행 파일에는 MSIL 및 필요한 메타데이터가 들어 있으며, 이 파일을 실행하면 MSIL이 예상대로 실행되는지 여부를 확인할 수 있습니다.

이 도구는 Visual Studio 및 Windows SDK와 함께 자동으로 설치됩니다. 도구를 실행하려면 Visual Studio 명령 프롬프트 또는 Windows SDK 명령 프롬프트(CMD 셸)를 사용하는 것이 좋습니다. 이러한 유틸리티를 사용하면 설치 폴더를 탐색하지 않고도 도구를 쉽게 실행할 수 있습니다. 자세한 내용은 Visual Studio 및 Windows SDK 명령 프롬프트을 참조하십시오.

  • 컴퓨터에 Visual Studio를 설치한 경우 작업 표시줄에서 Start, All Programs, Visual Studio, Visual Studio Tools 및 Visual Studio Command Prompt를 차례로 클릭합니다.

    또는

    컴퓨터에 Windows SDK를 설치한 경우 작업 표시줄에서 Start, All Programs 및 Windows SDK의 폴더를 차례로 클릭한 다음 Command Prompt(또는 CMD Shell)를 클릭합니다.

  • 명령 프롬프트에 다음과 같이 입력합니다.

ilasm [options] filename [[options]filename...]

매개 변수

인수

설명

filename

.il 소스 파일의 이름을 나타냅니다. 이 파일은 메타데이터 선언 지시문과 기호화된 MSIL 명령으로 구성됩니다. Ilasm.exe를 사용하여 여러 개의 소스 파일 인수를 제공하면 하나의 PE 파일을 생성할 수 있습니다.

참고참고
.il 소스 파일의 마지막 코드 줄에는 후행 공백이나 줄 끝(EOL) 문자가 있어야 합니다.

Option

설명

/alignment =정수

FileAlignment를 NT 선택적 헤더의 integer에서 지정한 값으로 설정합니다. .alignment IL 지시문이 파일에 지정된 경우 이 옵션을 사용하면 재정의됩니다.

/base=정수

ImageBase를 NT 선택적 헤더의 integer에서 지정한 값으로 설정합니다. .imagebase IL 지시문이 파일에 지정된 경우 이 옵션을 사용하면 재정의됩니다.

/clock

지정된 .il 소스 파일에 대해 다음 컴파일 타임을 밀리초 단위로 측정하여 보고합니다.

Total Run: 다음의 특정 작업을 모두 수행하는 데 걸린 총 시간

Startup: 파일 로드 및 열기

Emitting MD: 메타데이터 내보내기

Ref to Def Resolution: 파일의 참조를 정의로 확인

CEE File Generation: 메모리에 파일 이미지 생성

PE File Writing: PE 파일에 이미지 작성

/debug[=IMPL|OPT]

지역 변수 및 인수 이름과 줄 번호 등의 디버깅 정보를 포함합니다. PDB 파일을 만듭니다.

/debug에 추가 값을 지정하지 않으면 JIT 최적화를 사용할 수 없고 PDB 파일의 시퀀스 위치를 사용합니다.

IMPL은 JIT 최적화를 사용할 수 없도록 하고 암시적 시퀀스 위치를 사용합니다.

OPT는 JIT 최적화를 사용할 수 있도록 하고 암시적 시퀀스 위치를 사용합니다.

IMPLOPT는 .NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/dll

.dll 파일을 출력 파일로 생성합니다.

/enc=file

지정한 소스 파일에서 편집하며 계속하기 델타를 만듭니다.

이 인수는 교육용 버전에서만 사용되며, 상업용 버전에서는 지원되지 않습니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/exe

실행 파일을 출력 파일로 생성합니다. 이 값이 기본값입니다.

/flags=정수

ImageFlags를 공용 언어 런타임 헤더의 integer에서 지정한 값으로 설정합니다. .corflags IL 지시문이 파일에 지정된 경우 이 옵션을 사용하면 재정의됩니다. integer의 올바른 값 목록은 CorHdr.h, COMIMAGE_FLAGS를 참조하십시오.

/fold

동일한 메서드 본문을 하나로 만듭니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/include=includePath

#include에 포함된 파일을 검색할 경로를 설정합니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/itanium

Intel Itanium을 대상 프로세서로 지정합니다.

이미지 비트가 지정되지 않은 경우 기본값은 /pe64입니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/key:keyFile

keyFile에 들어 있는 개인 키를 사용하여 강력한 서명이 있는 filename을 컴파일합니다.

/key:@keySource

keySource에 생성된 개인 키를 사용하여 강력한 서명이 있는 filename을 컴파일합니다.

/listing

표준 출력 파일에 대한 목록 파일을 생성합니다. 이 옵션을 생략하면 목록 파일이 생성되지 않습니다.

이 매개 변수는 .NET Framework 버전 2.0 이상에서 지원되지 않습니다.

/mdv=versionString

메타데이터 버전 문자열을 설정합니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/msv=major.minor

major 및 minor가 정수인 메타데이터 스트림 버전을 설정합니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/noautoinherit

기준 클래스를 지정하지 않으면 Object에서 기본 상속을 사용할 수 없습니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/nocorstub

CORExeMain 스텁을 생성하지 않습니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/nologo

Microsoft 시작 배너를 표시하지 않습니다.

/output:file.ext

출력 파일 이름 및 확장명을 지정합니다. 기본적으로 출력 파일 이름은 첫 번째 소스 파일의 이름과 같으며, 기본 확장명은 .exe입니다. /dll 옵션을 지정하는 경우 기본 확장명은 .dll입니다.

참고참고
/output:myfile.dll을 지정하면 /dll 옵션이 설정되지 않습니다./dll을 지정하지 않으면 myfile.dll이라는 실행 파일이 생성됩니다.

/optimize

긴 명령을 짧게 최적화합니다. 예를 들면, br를 br.s로 입력합니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/pe64

64비트 이미지(PE32+)를 만듭니다.

대상 프로세서가 지정되지 않은 경우 기본값은 /itanium입니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/pdb

디버그 정보 추적을 사용하지 않고 PDB 파일을 만듭니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/quiet

자동 모드를 지정하여 어셈블리 진행률을 보고하지 않습니다.

/resource:file.res

결과로 만들어지는 .exe 또는 .dll 파일에 *.res 형식의 지정된 리소스 파일을 포함합니다. /resource 옵션을 사용하여 .res 파일을 하나만 지정할 수 있습니다.

/stack=stackSize

NT 선택적 헤더의 SizeOfStackReserve 값을 stackSize로 설정합니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/stripreloc

기준 재배치가 필요하지 않도록 지정합니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/subsystem=정수

하위 시스템을 NT 선택적 헤더의 integer에서 지정한 값으로 설정합니다. .subsystem IL 지시문이 파일에 지정된 경우 이 명령을 사용하면 재정의됩니다. integer의 올바른 값 목록은 winnt.h, IMAGE_SUBSYSTEM을 참조하십시오.

/x64

64비트 AMD 프로세서를 대상 프로세서로 지정합니다.

이미지 비트가 지정되지 않은 경우 기본값은 /pe64입니다.

.NET Framework 버전 2.0에 새로 추가된 옵션입니다.

/?

이 도구의 명령 구문 및 옵션을 표시합니다.

참고참고

Ilasm.exe의 모든 옵션은 대/소문자가 구분되지 않으며 처음 세 문자로 인식됩니다.예를 들어, /lis/listing과 같고, /res:myresfile.res는 /resource:myresfile.res와 같습니다.인수를 지정하는 옵션에는 옵션과 인수 사이의 구분 기호로 콜론(:) 또는 등호(=) 중 하나만 사용할 수 있습니다.예를 들어, /output:file.ext는 /output=file.ext와 같습니다.

설명

MSIL 어셈블러를 사용하면 도구 공급업체는 MSIL 생성기를 쉽게 디자인하여 구현할 수 있으며, Ilasm.exe를 사용하면 도구 및 컴파일러 개발자는 MSIL을 PE 파일 형식으로 내보내는 것에 신경 쓰지 않고 MSIL 및 메타데이터 생성에만 몰두할 수 있습니다.

Ilasm.exe를 사용하면 C# 및 Visual Basic과 같이 런타임을 대상으로 하는 다른 컴파일러처럼 중간 개체 파일이 생성되지 않으며 PE 파일을 만들 때 링크하는 단계가 필요 없습니다.

MSIL 어셈블러를 사용하면 런타임을 대상으로 하는 프로그래밍 언어의 MSIL 기능 및 기존 메타데이터를 모두 표현할 수 있습니다. 이렇게 하면 이러한 프로그래밍 언어로 작성된 관리 코드를 MSIL 어셈블러에서 적절히 표현하고 Ilasm.exe를 사용하여 컴파일할 수 있습니다.

참고참고

.il 소스 파일의 마지막 코드 줄에 후행 공백이나 줄 끝(EOL) 문자가 없으면 컴파일이 실패할 수 있습니다.

Ilasm.exe는 자매 도구인 Ildasm.exe와 함께 사용할 수 있습니다. Ildasm.exe는 MSIL 코드가 들어 있는 PE 파일을 받아 Ilasm.exe에 입력할 수 있는 적합한 텍스트 파일로 만듭니다. 이렇게 하면 런타임 메타데이터 특성을 모두 지원하지 않는 프로그래밍 언어로 코드를 컴파일할 때 유용합니다. 코드를 컴파일하고 Ildasm.exe를 사용하여 출력을 실행한 후에는 결과로 만들어지는 MSIL 텍스트 파일을 수동으로 편집하여 손실된 특성을 추가할 수 있습니다. 그런 다음에는 Ilasm.exe를 통해 이 텍스트 파일을 실행하여 최종 실행 파일을 생성할 수 있습니다.

또한, 이 기술을 사용하면 서로 다른 컴파일러에서 생성된 여러 개의 PE 파일에서 하나의 PE 파일을 생성할 수도 있습니다.

참고참고

포함된 네이티브 코드가 들어 있는 PE 파일(예: Visual C++로 생성된 PE 파일)에는 현재 이 방법을 사용할 수 없습니다.

Ildasm.exe와 Ilasm.exe가 올바르게 결합되어 사용되도록 하기 위해 어셈블러에서는 일부 간단한 최적화 기능이 수행되지 않습니다. 즉, 어셈블러에서는 약식 명령을 사용할지 긴 형식의 명령을 사용할지 여부를 추론할 수 없습니다. 예를 들어, 이 도구에서는 MSIL 소스에서 작성하거나 다른 컴파일러에서 내보낸 긴 인코딩을 짧은 인코딩으로 대체할 수 있는지 여부를 확인하지 않습니다. 짧은 인코딩을 원하는 경우에는 해당 형식을 명시적으로 작성해야 합니다. 그러나 어셈블러에서는 해당 형식을 사용할 수 있는 범위의 초과 조건을 확인합니다.

참고참고

Ildasm.exe는 디스크의 파일에 대해서만 작동하며,전역 어셈블리 캐시에 설치된 파일에 대해서는 작동하지 않습니다.

MSIL 문법에 대한 자세한 내용은 Windows SDK(소프트웨어 개발 키트)에서 asmparse.grammar 파일을 참조하십시오.

예제

다음 명령은 MSIL 파일 myTestFile.il을 어셈블하고 실행 파일한 myTestFile.exe.를 생성합니다.

ilasm myTestFile

다음 명령을 사용하여 MSIL 파일 myTestFile.il을 어셈블하고 .dll 파일 myTestFile.dll을 생성합니다.

ilasm myTestFile /dll 

다음 명령을 사용하여 MSIL 파일 myTestFile.il을 어셈블하고 .dll 파일 myNewTestFile.dll을 생성합니다.

ilasm myTestFile /dll /output:myNewTestFile.dll

다음 코드 예제에서는 "Hello World!"를 콘솔에 표시하는 매우 간단한 응용 프로그램을 보여 줍니다. 이 코드를 컴파일한 다음 Ildasm.exe 도구를 사용하여 MSIL 파일을 생성할 수 있습니다.

using System;
public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

다음 MSIL 코드 예제는 이전 C# 코드 예제에 해당합니다. Ilasm.exe(MSIL 어셈블러) 도구를 사용하여 이 코드를 어셈블리로 컴파일할 수 있습니다. MSIL과 C# 코드 예제 모두 콘솔에 "Hello World!"를 표시합니다.

// Metadata version: v2.0.50215
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly sample
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x02F20000


// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit Hello
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World!"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Hello::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method Hello::.ctor

} // end of class Hello

참고 항목

참조

Ildasm.exe(MSIL 디스어셈블러)

Visual Studio 및 Windows SDK 명령 프롬프트

개념

관리되는 실행 프로세스

기타 리소스

.NET Framework 도구

변경 기록

날짜

변경 내용

이유

2011년 4월

Visual Studio 및 Windows SDK 명령 프롬프트 사용에 대한 정보를 추가했습니다.

향상된 기능 관련 정보