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