Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Asembler IL generuje przenośny plik wykonywalny (PE) z zestawu języka pośredniego (IL). (Aby uzyskać więcej informacji na temat IL, zobacz Zarządzany proces wykonywania). Możesz uruchomić wynikowy plik wykonywalny, który zawiera il i wymagane metadane, aby określić, czy IL działa zgodnie z oczekiwaniami.
To narzędzie jest instalowane automatycznie z programem Visual Studio. Aby uruchomić narzędzie, użyj wiersza polecenia dla deweloperów programu Visual Studio lub programu Visual Studio Developer PowerShell.
W wierszu polecenia wpisz:
Składnia
ilasm [options] filename [[options]filename...]
Parametry
Argument | opis |
---|---|
filename |
Nazwa pliku źródłowego il. Ten plik zawiera dyrektywy deklaracji metadanych i symboliczne instrukcje języka IL. W celu utworzenia pojedynczego pliku PE z Ilasm.exe można podać wiele argumentów pliku źródłowego. Uwaga: Upewnij się, że ostatni wiersz kodu w pliku źródłowym il ma znak końcowy biały lub znak końca wiersza. |
Opcja | Opis |
---|---|
/32bitpreferred | Tworzy obraz 32-bitowy (PE32). |
/wyrównanie: integer |
Ustawia wartość FileAlignment na wartość określoną w integer nagłówku NT Optional. Jeśli dyrektywa języka IL .alignment została określona w pliku, ta opcja zastępuje ją. |
/appcontainer | Tworzy plik .dll lub .exe uruchamiany w kontenerze aplikacji systemu Windows jako dane wyjściowe. |
/ramię | Określa procesor Advanced RISC Machine (ARM) jako procesor docelowy. Jeśli nie określono bitowości obrazu, wartość domyślna to /32bitpreferred. |
/baza: integer |
Ustawia parametr ImageBase na wartość określoną przez integer w nagłówku NT Optional. Jeśli dyrektywa języka IL .imagebase została określona w pliku, ta opcja zastępuje ją. |
/zegar | Mierzy i raportuje następujące czasy kompilacji (w milisekundach) dla określonego pliku źródłowego il: Łączny przebieg: łączny czas spędzony na wykonywaniu wszystkich kolejnych operacji. Uruchamianie: ładowanie i otwieranie pliku. Emitowanie md: emitowanie metadanych. Ref to Def Resolution: Rozpoznawanie odwołań do definicji w pliku. Generacja plików CEE: Generowanie obrazu pliku w pamięci. Zapisywanie pliku PE: zapisywanie obrazu w pliku PE. |
/debug[:IMPL|OPT] | Dołącza informacje o debugowaniu (zmienne lokalne, nazwy argumentów i numery wierszy). Tworzy plik PDB. /debug bez dodatkowej wartości wyłącza optymalizację JIT i używa punktów sekwencji z pliku PDB. Usługa IMPL wyłącza optymalizację JIT i używa niejawnych punktów sekwencji. Opt umożliwia optymalizację trybu JIT i używa niejawnych punktów sekwencji. |
/Dll | Tworzy plik .dll jako dane wyjściowe. |
/Enc: file |
Tworzy plik różnic Edytuj-i-Kontynuuj z określonego pliku źródłowego. Ten argument jest tylko do użytku akademickiego i nie jest obsługiwany w użytku komercyjnym. |
/exe | Tworzy plik wykonywalny jako dane wyjściowe. Jest to opcja domyślna. |
/Flagi: integer |
Ustawia parametr ImageFlags na wartość określoną przez integer w nagłówku środowiska uruchomieniowego języka wspólnego. Jeśli dyrektywa języka IL .corflags została określona w pliku, ta opcja zastępuje ją. Zobacz CorHdr.h, COMIMAGE_FLAGS, aby uzyskać listę prawidłowych wartości dla liczby całkowitej. |
/fałda | Składa identyczne treści metod w jedną. |
/highentropyva | Tworzy wyjściowy plik wykonywalny, który obsługuje generowanie losowe układów przestrzeni adresowej (ASLR) o wysokiej entropii. (Wartość domyślna dla /appcontainer). |
/zawierać: includePath |
Ustawia ścieżkę do wyszukiwania plików dołączonych do #include elementu . |
/itanium | Określa procesor Intel Itanium jako procesor docelowy. Jeśli nie określono bitowości obrazu, wartość domyślna to /pe64. |
/klucz: keyFile |
Kompiluje filename z silnym podpisem przy użyciu klucza prywatnego zawartego w pliku keyFile . |
/klucz: @keySource |
Kompiluje filename się przy użyciu silnego podpisu przy użyciu klucza prywatnego utworzonego w pliku keySource . |
/Aukcji | Tworzy plik listy w standardowym wyjściu. Jeśli ta opcja zostanie pominięta, plik listy nie zostanie utworzony. Ten parametr nie jest obsługiwany w programie .NET Framework 2.0 i nowszych. |
/mdv: versionString |
Ustawia ciąg wersji metadanych. |
/msv: major .minor |
Ustawia wersję strumienia metadanych, gdzie major i minor są liczbami całkowitymi. |
/noautoinherit | Wyłącza dziedziczenie domyślne, Object gdy nie określono żadnej klasy bazowej. |
/nocorstub | Powoduje pominięcie generowania procedury wejścia CORExeMain. |
/nologo | Pomija wyświetlanie transparentu startowego firmy Microsoft. |
/wyjście: file.ext |
Określa nazwę i rozszerzenie pliku wyjściowego. Domyślnie nazwa pliku wyjściowego jest taka sama jak nazwa pierwszego pliku źródłowego. Domyślne rozszerzenie to .exe. Jeśli określisz /dll opcji, domyślne rozszerzenie jest .dll. Uwaga: Określanie /output:myfile.dll nie ustawia /dll opcji. Jeśli nie określisz /dll, wynik będzie plikiem wykonywalnym o nazwie myfile.dll. |
/optimize | Optymalizuje długie instrukcje, co powoduje zamianę ich na krótkie. Na przykład br na br.s . |
/pe64 | Tworzy obraz 64-bitowy (PE32+). Jeśli nie określono procesora docelowego, wartość domyślna to /itanium . |
/pdb | Tworzy plik PDB bez włączania śledzenia informacji o debugowaniu. |
/quiet | Określa tryb cichy; nie zgłasza postępów zestawu. |
/zasób: file.res |
Zawiera określony plik zasobu w formacie *.res w wynikowym pliku .exe lub .dll . Można określić tylko jeden plik res z opcją /resource . |
/ssver: int .int |
Ustawia numer wersji podsystemu w opcjonalnym nagłówku NT. W przypadku /appcontainer i /arm minimalny numer wersji to 6.02. |
/stos: stackSize |
Ustawia wartość SizeOfStackReserve w nagłówku NT Optional na stackSize wartość . |
/stripreloc | Określa, że nie są potrzebne relokacje podstawowe. |
/Podsystemu: integer |
Ustawia podsystem na wartość określoną przez integer w nagłówku opcjonalnym NT. Jeśli dyrektywa języka IL .subsystem została określona w pliku, to polecenie zastępuje ją. Aby uzyskać listę prawidłowych wartości dla elementu integer , zobacz winnt.h, IMAGE_SUBSYSTEM . |
/x64 | Określa 64-bitowy procesor firmy AMD jako procesor docelowy. Jeśli nie określono bitowości obrazu, wartość domyślna to /pe64. |
/? | Wyświetla składnię polecenia i opcje narzędzia. |
Uwaga
Wszystkie opcje dla Ilasm.exe są bez uwzględniania wielkości liter i rozpoznawane przez pierwsze trzy litery. Na przykład /lis jest odpowiednikiem /listing i /res:myresfile.res jest odpowiednikiem /resource:myresfile.res. Opcje określające argumenty akceptują dwukropek (:) lub znak równości (=) jako separator między opcją a argumentem. Na przykład /output:file.ext jest odpowiednikiem /output=file.ext.
Uwagi
Program IL Assembler umożliwia dostawcom narzędzi projektowanie i implementowanie generatorów języka IL. Korzystając z Ilasm.exe, deweloperzy narzędzi i kompilatora mogą skoncentrować się na generowaniu il i metadanych bez konieczności emitowania IL w formacie pliku PE.
Podobnie jak w przypadku innych kompilatorów przeznaczonych dla środowiska uruchomieniowego, takich jak C# i Visual Basic, Ilasm.exe nie tworzy plików obiektów pośrednich i nie wymaga etapu łączenia w celu utworzenia pliku PE.
Program IL Assembler może wyrazić wszystkie istniejące metadane i funkcje IL języków programowania, które są przeznaczone dla środowiska uruchomieniowego. Dzięki temu kod zarządzany napisany w dowolnym z tych języków programowania może być odpowiednio wyrażony w asemblera IL i skompilowany przy użyciu Ilasm.exe.
Uwaga
Kompilacja może się nie powieść, jeśli ostatni wiersz kodu w pliku źródłowym il nie kończy się znakiem odstępu ani znakiem końca wiersza.
Można użyć Ilasm.exe w połączeniu z jego narzędziem towarzyszącym, Ildasm.exe. Ildasm.exe pobiera plik PE zawierający kod IL i tworzy plik tekstowy odpowiedni jako dane wejściowe do Ilasm.exe. Jest to przydatne na przykład podczas kompilowania kodu w języku programowania, który nie obsługuje wszystkich atrybutów metadanych środowiska uruchomieniowego. Po skompilowaniu kodu i uruchomieniu danych wyjściowych za pośrednictwem Ildasm.exe wynikowy plik tekstowy IL można ręcznie edytować, aby dodać brakujące atrybuty. Następnie możesz uruchomić ten plik tekstowy za pośrednictwem Ilasm.exe w celu utworzenia końcowego pliku wykonywalnego.
Tej techniki można również użyć, aby utworzyć pojedynczy plik PE z kilku plików PE, oryginalnie utworzonych przez różne kompilatory.
Uwaga
Obecnie nie można używać tej techniki w połączeniu z plikami PE zawierającymi osadzony kod natywny (na przykład pliki PE generowane przez program Visual C++).
W celu zapewnienia tego połączonego użycia Ildasm.exe i Ilasm.exe tak dokładne, jak to możliwe, asembler domyślnie nie zastępuje krótkich kodowań długich, które mogły być zapisywane w źródłach IL (lub które mogą być emitowane przez inny kompilator). Użyj /optimize opcji, aby zastąpić krótkie kodowania wszędzie tam, gdzie to możliwe.
Uwaga
Ildasm.exe działa tylko na plikach na dysku. Nie wykonuje operacji na plikach zainstalowanych w globalnej pamięci podręcznej zestawów.
Aby uzyskać więcej informacji na temat gramatyki języka IL, zobacz plik asmparse.grammar w zestawie WINDOWS SDK.
Informacje o wersji
Począwszy od programu .NET Framework 4.5, można dołączyć atrybut niestandardowy do implementacji interfejsu przy użyciu kodu podobnego do następującego:
.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 )
…
Począwszy od programu .NET Framework 4.5, można określić dowolny obiekt BLOB marshal (duży obiekt binarny) przy użyciu jego nieprzetworzonej reprezentacji binarnej, jak pokazano w poniższym kodzie:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
Aby uzyskać więcej informacji na temat gramatyki języka IL, zobacz plik asmparse.grammar w zestawie WINDOWS SDK.
Przykłady
Następujące polecenie tworzy myTestFile.il pliku IL i tworzy myTestFile.exe wykonywalny.
ilasm myTestFile
Następujące polecenie tworzy myTestFile.il pliku IL i tworzy myTestFile.dll pliku .dll.
ilasm myTestFile /dll
Następujące polecenie tworzy myTestFile.il pliku IL i tworzy plik .dll myNewTestFile.dll.
ilasm myTestFile /dll /output:myNewTestFile.dll
Poniższy przykład kodu przedstawia niezwykle prostą aplikację, która wyświetla komunikat "Hello World!" do konsoli. Możesz skompilować ten kod, a następnie użyć narzędzia Ildasm.exe do wygenerowania pliku IL.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Poniższy przykład kodu w języku IL odpowiada poprzedniemu przykładowi kodu w języku C#. Ten kod można skompilować do zestawu przy użyciu narzędzia asemblera IL. W konsoli są wyświetlane przykłady kodu IL i C#.
// 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