Compartilhar via


Assembler MSIL (Ilasm.exe)

MSIL Assembler gera um arquivo executável portável (PE) a partir Microsoft intermediate linguagem (MSIL). (Para obter mais informações sobre MSIL, consulte Compilação para MSIL). Você pode executar o executável resultante, que contém o MSIL e sistema autônomo metadados necessários, para determinar se o MSIL executa sistema autônomo esperado.

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

Parâmetros

Argumento

Descrição

nome do arquivo

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

ObservaçãoObservação:
Certifique-se de que a última linha do código na.IL arquivo de fonte tem espaço em branco à direita ou um e caractere de ND de linha .

Opção

Descrição

/alinhamento =inteiro de

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

/ basear =inteiro de

Define ImageBase para o valor especificado por número inteiro 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 os tempos de compilação seguinte em milissegundos para .il especificado arquivo de fonte:

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

Inicialização: Carregando e abrir o arquivo.

Emitindo MD: Emitir metadados.

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

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

Texto do arquivo PE: Gravar a imagem em um arquivo PE.

/depurar=IMPL|OPT]

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

/debug com nenhum valor adicional desabilita a otimização JIT e usa pontos de sequência do arquivo PDB.

IMPL desabilita a otimização JIT e usa pontos implícita de sequência.

OPT permite a otimização JIT e utiliza pontos implícita de sequência.

IMPL e OPT são novos no .NET estrutura versão 2.0.

/DLL

Produz um arquivo .dll sistema autônomo saída.

/enc=file

Cria edição and Continue deltas de especificado arquivo de fonte.

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

Novo no .NET estrutura versão 2.0.

/exe

Produz um arquivo executável sistema autônomo saída. Este é o padrão.

/ flags =inteiro de

Define ImageFlags para o valor especificado por número inteiro no cabeçalho do tempo de execução 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álido para número inteiro.

/fold

Dobras corpos de método idênticos em um.

Novo no .NET estrutura versão 2.0.

/include=includePath

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

Novo no .NET estrutura versão 2.0.

/itanium

Especifica Intel Itanium sistema autônomo o processador de destino.

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

Novo no .NET estrutura versão 2.0.

/chave:keyFile

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

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

Não há suporte para esse parâmetro no .NET estrutura versão 2.0 ou posterior.

/mdv=versionString

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

Novo no .NET estrutura versão 2.0.

/msv=major.minor

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

Novo no .NET estrutura versão 2.0.

/noautoinherit

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

Novo no .NET estrutura versão 2.0.

/nocorstub

Suprime a geração de stub CORExeMain.

Novo no .NET estrutura versão 2.0.

/nologo

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

/Output:arquivo.ext

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

ObservaçãoObservação:
Especificando /Output: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 o longas instruções para curto. Por exemplo, br para br.s.

Novo no .NET estrutura versão 2.0.

/pe64

Cria uma imagem de 64 bit (PE32 +).

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

Novo no .NET estrutura versão 2.0.

/pdb

Cria um arquivo PDB sem habilitando o acompanhamento de informações de depurar.

Novo no .NET estrutura versão 2.0.

/quiet

Especifica o modo silencioso; não relata progresso do assembly.

/recurso:arquivo.res

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

/stack=stackSize

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

Novo no .NET estrutura versão 2.0.

/stripreloc

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

Novo no .NET estrutura versão 2.0.

/subsistema =inteiro de

Configura o subsistema para o valor especificado por número inteiro no cabeçalho do NT opcional. Se a diretiva de IL .subsistema for especificada no arquivo, este comando substitui-lo. Consulte winnt.h, IMAGE_SUBSYSTEM para obter uma lista de valores válido para número inteiro.

/x64

Especifica um processador AMD de 64 bit sistema autônomo o processador de destino.

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

Novo no .NET estrutura versão 2.0.

/?

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

ObservaçãoObservação:

Todas as opções para Ilasm.exe são sem diferenciação de maiúsculas e minúsculas e é reconhecido pelas três primeiras letras. Por exemplo, /LIS é equivalente a / listagem and /res:é equivalente a myresfile.res/recurso: myresfile.res. Opções que especificam argumentos aceitam qualquer um dos dois-pontos (:) ou com um sinal de igual (=) sistema autônomo separador entre a opção e o argumento. For example, /output:file.ext is equivalent to /output=file.ext.

Comentários

MSIL Assembler ajuda ferramenta fornecedores projetar e implementar geradores de MSIL. Usando Ilasm.exe, os desenvolvedores de ferramenta e o compilador podem se concentrar na geração de metadados e MSIL sem sendo preocupada com emitindo MSIL no formato de arquivo PE.

Assim sistema autônomo outros compiladores que visa o tempo de execução, sistema autônomo translation from VPE for Csharp e Visual Basic, Ilasm.exe não produz arquivos de objeto intermediários e não requer um preparar de vinculação para formar um arquivo PE.

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

ObservaçãoObservação:

Compilação pode falhar se a última linha do código na. IL arquivo de fonte não tem espaço em branco à direita ou um caractere de participante de linha não .

Você pode usar Ilasm.exe em conjunto com sua ferramenta complementar, ILDASM.exe. Um arquivo PE que contém código MSIL e cria um arquivo de texto adequado sistema autônomo entrado para Ilasm.exe se obtém ILDASM.exe. Isso é útil, por exemplo, durante a compilação de código em uma linguagem de programação que não oferece suporte a todos os atributos de metadados em tempo de execução. Após compilar o código e executar a saída através de ILDASM.exe, o arquivo de texto MSIL resultante pode ser editados manualmente para adicionar os atributos ausentes. É possível executar este 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 de vários arquivos PE gerada originalmente por compiladores diferentes.

ObservaçãoObservação:

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

Para tornar esse uso combinado de ILDASM.exe e Ilasm.exe tão precisa quanto possível, o assembler não realiza algumas otimizações simples — não deduzir se deve 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 por um longo talvez você tenha escrito em suas fontes de MSIL (ou que pode ser emitido pelo compilador outro). Se você desejar que a codificação curta, você deve escrever esse formulário explicitamente. No entanto, o assembler verificar as condições fora do intervalo onde isso é possível.

ObservaçãoObservação:

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

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

Exemplos

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

ilasm myTestFile

O comando a seguir monta o MSIL arquivo myTestFile.il e produz o arquivo .dll myTestFile.dll.

ilasm myTestFile /dll 

O comando a seguir monta o MSIL arquivo myTestFile.il e produz o arquivo .dll myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

O exemplo de código a seguir mostra um aplicativo extremamente simples que exibe "Hello World!" para o 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 ao exemplo de código translation from VPE for Csharp anterior. Você pode compilar esse código em um assembly usando o Assembler MSIL (Ilasm.exe) ferramenta. Exemplos de código MSIL e translation from VPE for Csharp exibem "Hello World!" para o 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

Conceitos

Compilação para MSIL

Referência

Ferramentas.NET Framework

Desassemblador do MSIL (ILDASM.exe)

Prompt de comando SDK