Ilasm.exe (IL Assembler)Ilasm.exe (IL Assembler)

O IL Assembler gera um arquivo PE (Portable Executable) com base em IL (Intermediate Language).The IL Assembler generates a portable executable (PE) file from intermediate language (IL). (Para obter mais informações sobre IL, consulte processo de execução gerenciada.) Você pode executar o executável resultante, que contém IL e os metadados necessários, para determinar se o IL é executado conforme o esperado.(For more information on IL, see Managed Execution Process.) You can run the resulting executable, which contains IL and the required metadata, to determine whether the IL performs as expected.

Essa ferramenta é instalada automaticamente com o Visual Studio.This tool is automatically installed with Visual Studio. Para executar a ferramenta, use o Prompt de Comando do Desenvolvedor para Visual Studio (ou o Prompt de Comando do Visual Studio no Windows 7).To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Para obter mais informações, consulte Prompts de Comando.For more information, see Command Prompts.

No prompt de comando, digite o seguinte:At the command prompt, type the following:

SintaxeSyntax

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

ParâmetrosParameters

ArgumentoArgument DescriçãoDescription
filename O nome do arquivo de origem .il.The name of the .il source file. Esse arquivo consiste em diretivas de declaração de metadados e instruções de IL simbólicas.This file consists of metadata declaration directives and symbolic IL instructions. Vários argumentos do arquivo de origem podem ser fornecidos para produzir um único arquivo PE com Ilasm.exe.Multiple source file arguments can be supplied to produce a single PE file with Ilasm.exe. Observação: verifique se a última linha de código no arquivo de origem .il tem um espaço em branco à direita ou um caractere de final de linha.Note: Ensure that the last line of code in the .il source file has either trailing white space or an end-of-line character.
OpçãoOption DescriçãoDescription
/32bitpreferred/32bitpreferred Cria uma imagem preferida de 32 bits (PE32).Creates a 32-bit-preferred image (PE32).
/alignment: integer/alignment: integer Define FileAlignment como o valor especificado por integer no cabeçalho Opcional do NT.Sets FileAlignment to the value specified by integer in the NT Optional header. Se a diretiva IL .alignment for especificada no arquivo, essa opção a substituirá.If the .alignment IL directive is specified in the file, this option overrides it.
/appcontainer/appcontainer Produz um arquivo .dll ou .exe que é executado no contêiner do aplicativo do Windows, como saída.Produces a .dll or .exe file that runs in the Windows app container, as output.
/arm/arm Especifica o ARM (Advanced RISC Machine) como o processador de destino.Specifies the Advanced RISC Machine (ARM) as the target processor.

Se nenhum número de bit da imagem for especificado, o padrão será /32bitpreferred.If no image bitness is specified, the default is /32bitpreferred.
/base: integer/base: integer Define ImageBase como o valor especificado por integer no cabeçalho Opcional do NT.Sets ImageBase to the value specified by integer in the NT Optional header. Se a diretiva IL .imagebase for especificada no arquivo, essa opção a substituirá.If the .imagebase IL directive is specified in the file, this option overrides it.
/clock/clock Mede e relata os seguintes tempos de compilação em milissegundos para o arquivo de origem .il especificado:Measures and reports the following compilation times in milliseconds for the specified .il source file:

Total Run: o tempo total gasto na realização de todas as operações específicas que seguem.Total Run: The total time spent performing all the specific operations that follow.

Startup: carregando e abrindo o arquivo.Startup: Loading and opening the file.

Emitting MD: emitindo metadados.Emitting MD: Emitting metadata.

Ref to Def Resolution: resolvendo referências para definições no arquivo.Ref to Def Resolution: Resolving references to definitions in the file.

CEE File Generation: gerando a imagem do arquivo na memória.CEE File Generation: Generating the file image in memory.

PE File Writing: gravando a imagem em um arquivo PE.PE File Writing: Writing the image to a PE file.
/debug[:IMPL|OPT]/debug[:IMPL|OPT] Inclui informações de depuração (variável local e nomes de argumento, além de números da linha).Includes debug information (local variable and argument names, and line numbers). Cria um arquivo PDB.Creates a PDB file.

/debug sem valor adicional desabilita a otimização JIT e usa pontos de sequência do arquivo PDB./debug with no additional value disables JIT optimization and uses sequence points from the PDB file.

IMPL desabilita a otimização JIT e usa pontos de sequência implícitos.IMPL disables JIT optimization and uses implicit sequence points.

OPT habilita a otimização JIT e usa pontos de sequência implícitos.OPT enables JIT optimization and uses implicit sequence points.
/dll/dll Produz um arquivo .dll como saída.Produces a .dll file as output.
/enc: file/enc: file Cria deltas Editar e Continuar com base no arquivo de origem especificado.Creates Edit-and-Continue deltas from the specified source file.

Este argumento se destina apenas ao uso acadêmico e não é compatível com uso comercial.This argument is for academic use only and is not supported for commercial use.
/exe/exe Produz um arquivo executável como saída.Produces an executable file as output. Esse é o padrão.This is the default.
/flags: integer/flags: integer Define ImageFlags como o valor especificado por integer no cabeçalho do Common Language Runtime.Sets ImageFlags to the value specified by integer in the common language runtime header. Se a diretiva IL .corflags for especificada no arquivo, essa opção a substituirá.If the .corflags IL directive is specified in the file, this option overrides it. Consulte CorHdr.h, COMIMAGE_FLAGS para obter uma lista de valores válidos para integer.See CorHdr.h, COMIMAGE_FLAGS for a list of valid values for integer.
/fold/fold Dobra corpos de método idênticos em um.Folds identical method bodies into one.
/highentropyva/highentropyva Produz um executável de saída que dá suporte a ASLR (Address Space Layout Randomization) de alta entropia.Produces an output executable that supports high-entropy address space layout randomization (ASLR). (Padrão para /appcontainer.)(Default for /appcontainer.)
/include: includePath/include: includePath Define um caminho para procurar arquivos incluídos com #include.Sets a path to search for files included with #include.
/itanium/itanium Especifica Intel Itanium como o processador de destino.Specifies Intel Itanium as the target processor.

Se nenhum número de bit da imagem for especificado, o padrão será /pe64.If no image bitness is specified, the default is /pe64.
/key: keyFile/key: keyFile Compila filename com uma assinatura forte usando a chave privada contida em keyFile.Compiles filename with a strong signature using the private key contained in keyFile.
/key: @keySource/key: @keySource Compila filename com uma assinatura forte usando a chave privada produzida em keySource.Compiles filename with a strong signature using the private key produced at keySource.
/listing/listing Produz um arquivo de listagem na saída padrão.Produces a listing file on the standard output. Se você omitir essa opção, nenhum arquivo de listagem será produzido.If you omit this option, no listing file is produced.

Esse parâmetro não é compatível no .NET Framework 2.0 ou posterior.This parameter is not supported in the .NET Framework 2.0 or later.
/mdv: versionString/mdv: versionString Defina a cadeia de caracteres de versão dos metadados.Sets the metadata version string.
/msv: major.minor/msv: major.minor Define a versão do fluxo de metadados, em que major e minor sejam inteiros.Sets the metadata stream version, where major and minor are integers.
/noautoinherit/noautoinherit Desabilita a herança padrão de Object quando nenhuma classe de base está especificada.Disables default inheritance from Object when no base class is specified.
/nocorstub/nocorstub Suprime a geração do stub CORExeMain.Suppresses generation of the CORExeMain stub.
/nologo/nologo Suprime a exibição do banner de inicialização da Microsoft.Suppresses the Microsoft startup banner display.
/output: file.ext/output: file.ext Especifica o nome e a extensão do arquivo de saída.Specifies the output file name and extension. Por padrão, o nome do arquivo de saída é igual ao nome do primeiro arquivo de origem.By default, the output file name is the same as the name of the first source file. A extensão padrão é .exe.The default extension is .exe. Se você especificar a opção /dll, a extensão padrão será .dll.If you specify the /dll option, the default extension is .dll. Observação: a especificação de /output: myfile.dll não define a opção /dll.Note: Specifying /output:myfile.dll does not set the /dll option. Se você não especificar /dll, o resultado será um arquivo executável chamado myfile.dll.If you do not specify /dll, the result will be an executable file named myfile.dll.
/optimize/optimize Otimiza instruções longas para curtas.Optimizes long instructions to short. Por exemplo, br para br.s.For example, br to br.s.
/pe64/pe64 Cria uma imagem de 64 bits (PE32+).Creates a 64-bit image (PE32+).

Se nenhum processador de destino for especificado, o padrão será /itanium.If no target processor is specified, the default is /itanium.
/pdb/pdb Cria um arquivo PDB sem habilitar o acompanhamento das informações de depuração.Creates a PDB file without enabling debug information tracking.
/quiet/quiet Especifica o modo silencioso; não relata o andamento do assembly.Specifies quiet mode; does not report assembly progress.
/resource: file.res/resource: file.res Inclui o arquivo de recurso especificado no formato *.res no arquivo .exe ou .dll resultante.Includes the specified resource file in *.res format in the resulting .exe or .dll file. Apenas um arquivo .res pode ser especificado com a opção /resource.Only one .res file can be specified with the /resource option.
/ssver: int.int/ssver: int.int Define o número de versão do subsistema no cabeçalho opcional do NT.Sets the subsystem version number in the NT optional header. Para /appcontainer e /arm o número de versão mínimo é 6.02.For /appcontainer and /arm the minimum version number is 6.02.
/stack: stackSize/stack: stackSize Define o valor SizeOfStackReserve no cabeçalho Opcional do NT como stackSize.Sets the SizeOfStackReserve value in the NT Optional header to stackSize.
/stripreloc/stripreloc Especifica que nenhuma realocação de base é necessária.Specifies that no base relocations are needed.
/subsystem: integer/subsystem: integer Define o subsistema com o valor especificado por integer no cabeçalho Opcional do NT.Sets subsystem to the value specified by integer in the NT Optional header. Se a diretiva IL .subsystem for especificada no arquivo, esse comando a substituirá.If the .subsystem IL directive is specified in the file, this command overrides it. Consulte winnt.h, IMAGE_SUBSYSTEM para obter uma lista de valores válidos para integer.See winnt.h, IMAGE_SUBSYSTEM for a list of valid values for integer.
/x64/x64 Especifica um processador AMD 64 bits como o processador de destino.Specifies a 64-bit AMD processor as the target processor.

Se nenhum número de bit da imagem for especificado, o padrão será /pe64.If no image bitness is specified, the default is /pe64.
/?/? Exibe sintaxe de comando e opções para a ferramenta.Displays command syntax and options for the tool.

Observação

Todas as opções para Ilasm.exe não diferenciam maiúsculas de minúsculas e são reconhecidas pelas três primeiras letras.All options for Ilasm.exe are case-insensitive and recognized by the first three letters. Por exemplo, /Lis é equivalente a /Listing e /res: myresfile. res é equivalente a /Resource: myresfile. res. Opções que especificam argumentos aceitam dois-pontos (:) ou um sinal de igual (=) como o separador entre a opção e o argumento.For example, /lis is equivalent to /listing and /res:myresfile.res is equivalent to /resource:myresfile.res. Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. Por exemplo, /output:file.ext é equivalente a /output=file.ext.For example, /output:file.ext is equivalent to /output=file.ext.

ComentáriosRemarks

O IL Assembler ajuda fornecedores da ferramentas na criação e na implementação dos geradores IL.The IL Assembler helps tool vendors design and implement IL generators. Usando Ilasm.exe, os desenvolvedores de ferramenta e compilador podem concentrar-se na geração de IL e de metadados sem se preocupar em emitir IL no formato de arquivo PE.Using Ilasm.exe, tool and compiler developers can concentrate on IL and metadata generation without being concerned with emitting IL in the PE file format.

Semelhante a outros compiladores que têm o tempo de execução como destino, por exemplo, C# e Visual Basic, o Ilasm.exe não produz arquivos de objeto intermediários e não exige um estágio de vinculação para formar um arquivo PE.Similar to other compilers that target the runtime, such as C# and Visual Basic, Ilasm.exe does not produce intermediate object files and does not require a linking stage to form a PE file.

O IL Assembler pode expressar todos os metadados existentes e recursos IL das linguagens de programação com o runtime como destino.The IL Assembler can express all the existing metadata and IL features of the programming languages that target the runtime. Isso permite que o código gerenciado escrito em qualquer uma das linguagens de programação seja expresso adequadamente no IL Assembler e compilado com Ilasm.exe.This allows managed code written in any of these programming languages to be adequately expressed in IL Assembler and compiled with Ilasm.exe.

Observação

A compilação poderá falhar se a última linha do código no arquivo de origem .il não tiver espaço em branco à direita ou um caractere de final de linha.Compilation might fail if the last line of code in the .il source file does not have either trailing white space or an end-of-line character.

Você pode usar Ilasm.exe junto com sua ferramenta complementar, o Ildasm.exe.You can use Ilasm.exe in conjunction with its companion tool, Ildasm.exe. O Ildasm.exe usa um arquivo PE que contém o código IL e cria um arquivo de texto adequado como entrada para Ilasm.exe.Ildasm.exe takes a PE file that contains IL code and creates a text file suitable as input to Ilasm.exe. Isso é útil, por exemplo, durante a compilação do código em uma linguagem de programação que não dá suporte a todos os atributos de metadados do runtime.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Depois de compilar o código e executar a saída por meio do Ildasm.exe, o arquivo de texto IL resultante poderá ser editado manualmente para adicionar os atributos ausentes.After compiling the code and running the output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. Em seguida, é possível executar esse arquivo de texto por meio do Ilasm.exe para produzir um arquivo executável final.You can then run this text file through the Ilasm.exe to produce a final executable file.

Também é possível usar essa técnica para produzir um único arquivo PE com base em vários arquivos PE gerados originalmente por compiladores diferentes.You can also use this technique to produce a single PE file from several PE files originally generated by different compilers.

Observação

Atualmente, não é possível usar essa técnica com arquivos PE que contenham código nativo inserido (por exemplo, arquivos PE produzidos por Visual C++).Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Para que esse uso combinado de Ildasm.exe e Ilasm.exe fique o mais preciso possível, por padrão, o assembler não substitui codificações curtas pelas longas que você talvez tenha gravado nas fontes IL (ou que possam ter sido emitidas por outro compilador).To make this combined use of Ildasm.exe and Ilasm.exe as accurate as possible, by default the assembler does not substitute short encodings for long ones you might have written in your IL sources (or that might be emitted by another compiler). Use a opção /optimize para substituir codificações curtas sempre que possível.Use the /optimize option to substitute short encodings wherever possible.

Observação

O Ildasm.exe funciona apenas em arquivos no disco.Ildasm.exe only operates on files on disk. Ele não funciona em arquivos instalados no cache de assembly global.It does not operate on files installed in the global assembly cache.

Saiba mais sobre a gramática de IL no arquivo asmparse.grammar no SDK do Windows.For more information about the grammar of IL, see the asmparse.grammar file in the Windows SDK.

Informações de versãoVersion Information

Do .NET Framework 4.5 em diante, é possível anexar um atributo personalizado a uma implementação da interface usando-se código semelhante ao seguinte:Starting with the .NET Framework 4.5, you can attach a custom attribute to an interface implementation by using code similar to the following:

.class interface public abstract auto ansi IMyInterface
{
  .method public hidebysig newslot abstract virtual
    instance int32 method1() cil managed
  {
  } // end of method IMyInterface::method1
} // end of class IMyInterface
.class public auto ansi beforefieldinit MyClass
  extends [mscorlib]System.Object
  implements IMyInterface
  {
    .interfaceimpl type IMyInterface
    .custom instance void
      [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
      …

Do .NET Framework 4.5 em diante, é possível especificar um BLOB (objeto binário grande) marshaling arbitrário usando-se sua representação binária bruta, conforme mostrado no seguinte código:Starting with the .NET Framework 4.5, you can specify an arbitrary marshal BLOB (binary large object) by using its raw binary representation, as shown in the following code:

.method public hidebysig abstract virtual
        instance void
        marshal({ 38 01 02 FF })
        Test(object A_1) cil managed

Saiba mais sobre a gramática de IL no arquivo asmparse.grammar no SDK do Windows.For more information about the grammar of IL, see the asmparse.grammar file in the Windows SDK.

ExemplosExamples

O comando a seguir monta o arquivo IL myTestFile.il e produz o executável myTestFile.exe.The following command assembles the IL file myTestFile.il and produces the executable myTestFile.exe.

ilasm myTestFile

O comando a seguir monta o arquivo IL myTestFile.il e produz o arquivo .dll myTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myTestFile.dll.

ilasm myTestFile /dll

O comando a seguir monta o arquivo IL myTestFile.il e produz o .dll arquivo myNewTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

O exemplo de código a seguir mostra um aplicativo extremamente simples que exibe "Hello World!"The following code example shows an extremely simple application that displays "Hello World!" no console.to the console. Você pode compilar seu código e, em seguida, usar a ferramenta Ildasm.exe para gerar um arquivo IL.You can compile this code and then use the Ildasm.exe tool to generate an IL file.

using System;

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

O exemplo de código IL a seguir corresponde ao exemplo de código do C# anterior.The following IL code example corresponds to the previous C# code example. É possível compilar esse código em um assembly usando a ferramenta IL Assembler.You can compile this code into an assembly using the IL Assembler tool. Os exemplos de código IL e do C# exibem "Hello World!"Both IL and C# code examples display "Hello World!" no console.to the console.

// 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

Consulte tambémSee also