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çã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çã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çã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çã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çã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çã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