Partilhar via


Ilasm. exe (Assembler MSIL)

O Assembler MSIL gera um arquivo de executável portável (PE) da Microsoft intermediate language (MSIL). (Para obter mais informações sobre o MSIL, consulte Processo de Execução Gerenciada.) Você pode executar o executável resultante, que contém o MSIL e os metadados necessários, para determinar se o MSIL executa como esperado.

O Assembler MSIL é instalado automaticamente com o Visual Studio. Para iniciar o Assembler MSIL, use o Prompt de comando Visual Studio. No prompt de comando, digite o seguinte:

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

Parâmetros

Argumento

Descrição

nome do arquivo

O nome do arquivo de origem .il. O arquivo consiste em diretivas de declaração de metadados e instruções da MSIL simbólicas. Vários argumentos de arquivo de origem podem ser fornecidos para produzir um único arquivo PE com Ilasm. exe.

Observação

Certifique-se de que a última linha do código no arquivo de origem .il possui espaços à direita ou um caractere de final de linha.

Opção

Descrição

/Alignment =inteiro

Define FileAlignment para o valor especificado por integer no cabeçalho do NT opcional. Se a diretiva de IL .alignment for especificada no arquivo, essa opção substitui-lo.

/base =inteiro

Define ImageBase para o valor especificado por integer no cabeçalho do NT opcional. Se a diretiva de IL .imagebase for especificada no arquivo, essa opção substitui-lo.

/clock

Mede e relata o seguinte tempo de compilação em milissegundos para o arquivo de origem especificado .il:

Total de execução: O tempo total gasto executando as operações específicas que se seguem.

Inicialização: Carregando e abrir o arquivo.

Emitindo MD: Emitindo metadados.

Ref para resolução de Def: Resolvendo referências a definições no arquivo.

Geração do arquivo CEE: Gerando imagem de arquivo na memória.

Gravação do arquivo PE: Gravar a imagem em um arquivo PE.

/Debug[=IMPL|OPT]

Inclui informações de depuração (nomes de variável e argumento locais e números de linha). Cria um arquivo PDB.

/debugcom nenhum valor adicional desabilita a otimização JIT e utiliza pontos de seqüência do arquivo PDB.

IMPLdesabilita a otimização JIT e usa pontos de seqüência implícita.

OPTpermite a otimização JIT e usa pontos de seqüência implícita.

IMPLe OPT são novos na.NET Framework versão 2.0.

/DLL

Produz um arquivo. dll como saída.

/enc=file

Cria deltas Edit and Continue a partir do arquivo de origem especificado.

Esse argumento é para uso acadêmico somente e não há suporte para uso comercial.

Novo na.NET Framework versão 2.0.

/exe

Produz um arquivo executável como saída. Este é o padrão.

/Flags =inteiro

Define o valor especificado por ImageFlags integer no cabeçalho do runtime de linguagem comum. Se a diretiva de IL .corflags for especificada no arquivo, essa opção substitui-lo. Consulte CorHdr.h, COMIMAGE_FLAGS para obter uma lista de valores válidos para integer.

/fold

Dobras idênticos corpos em um.

Novo na.NET Framework versão 2.0.

/include=includePath

Define um caminho para procurar por arquivos incluídos no #include.

Novo na.NET Framework versão 2.0.

/itanium

Especifica o Itanium da Intel como o processador de destino.

Se nenhum número de bits de imagem for especificado, o padrão é /pe64.

Novo na.NET Framework versão 2.0.

/ chave:keyFile

Compila nome de arquivo com uma assinatura forte usando a chave particular contida em keyFile.

/ chave: @keySource

Compila nome de arquivo com uma assinatura forte usando a chave particular produzido em keySource.

/ listagem

Produz um arquivo de listagem na saída padrão. Se você omitir esta opção, nenhum arquivo de listagem é produzido.

Este parâmetro não é suportado no.NET Framework versão 2.0 ou posterior.

/mdv=versionString

Define a seqüência de caracteres de versão de metadados.

Novo na.NET Framework versão 2.0.

/msv=major.minor

Define a versão de fluxo de metadados, onde major e minor são números inteiros.

Novo na.NET Framework versão 2.0.

/noautoinherit

Desativa o padrão de herança de Object quando nenhuma classe de base é especificada.

Novo na.NET Framework versão 2.0.

/nocorstub

Suprime a geração do stub de CORExeMain.

Novo na.NET Framework versão 2.0.

/nologo

Suprime a exibição Microsoft faixa de inicialização.

/ saída:file.ext

Especifica o nome do arquivo de saída e a extensão. Por padrão, o nome do arquivo de saída é o mesmo que o nome do primeiro arquivo de origem. A extensão padrão é. exe. Se você especificar o /dll opção, a extensão padrão é. dll.

Observação

Especificando /saída:myfile.dll não define o /dll opção.Se você não especificar /dll, o resultado será um arquivo executável chamado myfile.dll.

/optimize

Otimiza longas instruções para curto. Por exemplo, br para br.s.

Novo na.NET Framework versão 2.0.

/pe64

Cria uma imagem de 64 bits (PE32 +).

Se nenhum processador de destino for especificado, o padrão é /itanium.

Novo na.NET Framework versão 2.0.

/pdb

Cria um arquivo PDB sem ativar o rastreamento de informações de depuração.

Novo na.NET Framework versão 2.0.

/quiet

Especifica o modo silencioso; não relatar o andamento do assembly.

/Resource:file.res

Inclui o arquivo de recurso especificado no formato *.res. exe resultante ou o arquivo. dll. Somente um arquivo. res que pode ser especificado com o /resource opção.

/stack=stackSize

Define o valor de SizeOfStackReserve no cabeçalho do NT opcional para stackSize.

Novo na.NET Framework versão 2.0.

/stripreloc

Especifica que nenhum relocações de base são necessários.

Novo na.NET Framework versão 2.0.

/Subsystem =inteiro

Define o subsistema para o valor especificado por integer no cabeçalho do NT opcional. Se a diretiva de IL .subsystem for especificada no arquivo, este comando substitui-lo. Consulte Winnt. h, IMAGE_SUBSYSTEM para obter uma lista de valores válidos para integer.

/x64

Especifica um processador AMD de 64 bits do processador de destino.

Se nenhum número de bits de imagem for especificado, o padrão é /pe64.

Novo na.NET Framework versão 2.0.

/?

Exibe sintaxe de comando e opções para a ferramenta.

Observação

Todas as opções para Ilasm. exe são maiúsculas de minúsculas e reconhecido pelas primeiras três letras.Por exemplo, /lis é equivalente a /Listando e /res:myresfile.res é equivalente a /resource:myresfile.res.Opções que especificam os argumentos aceitam dois-pontos (:) ou um sinal de igual (=) como separador entre a opção e o argumento.Por exemplo, /saída:file.ext é equivalente a /saída =file.ext.

Comentários

O Assembler MSIL ajuda o design da ferramenta de fornecedores e implementar os geradores MSIL. Usando o Ilasm. exe, os desenvolvedores da ferramenta e o compilador podem se concentrar na geração de metadados e MSIL sem se preocupar com a emissão de MSIL no formato de arquivo PE.

Semelhante a outros compiladores que visa o runtime, como, por exemplo, C# e Visual Basic, Ilasm. exe não produza arquivos intermediários do objeto e não requer um estágio de vinculação para formar um arquivo PE.

O Assembler MSIL pode expressar todos os metadados existentes e os recursos MSIL das linguagens de programação que destino o tempo de execução. Isso permite que o código gerenciado escrito em qualquer uma dessas linguagens de programação a ser expressa adequadamente em Assembler MSIL e compilados com Ilasm. exe.

Observação

Compilação pode falhar se a última linha do código no arquivo de origem .il não tem espaço em branco à direita ou um caractere de final de linha.

Você pode usar Ilasm. exe em conjunto com sua ferramenta complementar, Ildasm. exe. Ildasm. exe leva de um arquivo PE que contém código MSIL e cria um arquivo de texto adequado como entrado para Ilasm. exe. Isso é útil, por exemplo, ao compilar o código em uma linguagem de programação não oferece suporte a todos os atributos de metadados de tempo de execução. Após compilar o código e executar a saída por meio de ILDASM. exe, o arquivo de texto MSIL resultante pode ser editados manualmente para adicionar os atributos ausentes. É possível executar o arquivo de texto por meio de Ilasm. exe para produzir um arquivo executável final.

Você também pode usar essa técnica para produzir um único arquivo PE a partir de vários arquivos de PE originalmente gerados por compiladores diferentes.

Observação

Atualmente, é possível usar essa técnica com arquivos PE que contêm o código nativo incorporado (por exemplo, os arquivos de PE produzidos pelo Visual C++).

Para tornar esse uso combinado do Ildasm. exe e Ilasm. exe tão precisa quanto possível, o montador não realiza algumas otimizações simples — não deduzir se usar formulários de curtos ou longos de instruções. Por exemplo, a ferramenta não tenta determinar se poderia substituir uma codificação curto para um nome longo, talvez você tenha escrito em suas fontes MSIL (ou que pode ser emitido pelo compilador outro). Se desejar que a codificação curto, escreva explicitamente desse formulário. No entanto, o montador verificar as condições de fora do intervalo onde isso é possível.

Observação

Ildasm. exe só funciona em arquivos no disco.Ele não funciona em arquivos instalados no cache global de assemblies.

Para obter mais informações sobre a gramática de MSIL, consulte o arquivo asmparse.grammar do Windows Software Development Kit (SDK).

Exemplos

O seguinte comando monta o arquivo MSIL myTestFile.il e produz o executável myTestFile.exe.

ilasm myTestFile

O seguinte comando monta o arquivo MSIL myTestFile.il e produz um arquivo. dll myTestFile.dll.

ilasm myTestFile /dll 

O seguinte comando monta o arquivo MSIL myTestFile.il e produz um arquivo. dll myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

O exemplo de código a seguir mostra um aplicativo extremamente simple que exibe "Hello World!". no console. Você pode compilar esse código e, em seguida, use o Ildasm. exe ferramenta para gerar um arquivo MSIL.

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

O seguinte exemplo de código MSIL corresponde à C# exemplo de código anterior. Você pode compilar este código em um assembly usando o Ilasm. exe (Assembler MSIL) ferramenta. Exemplos de código MSIL e C# exibem "Hello World!". no 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ém

Referência

Ildasm. exe (desmontador MSIL)

Prompt de comando Visual Studio

Conceitos

Processo de Execução Gerenciada

Outros recursos

Ferramentas.NET Framework