Ilasm.exe (Perakit IL)

Perakit IL menghasilkan file portable executable (PE) dari rakitan bahasa perantara (IL). (Untuk informasi selengkapnya tentang IL, lihat Proses Eksekusi Terkelola.) Anda dapat menjalankan executable yang dihasilkan, yang berisi IL dan metadata yang diperlukan, untuk menentukan apakah IL berfungsi seperti yang diharapkan.

Alat ini otomatis diinstal dengan Visual Studio. Untuk menjalankan alat, gunakan Prompt Perintah Pengembang Visual Studio atau PowerShell Pengembang Visual Studio .

Pada prompt perintah, ketik berikut ini:

Sintaks

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

Parameter

Argumen Deskripsi
filename Nama file sumber .il. File ini terdiri dari arahan deklarasi metadata dan instruksi IL simbolis. Beberapa argumen file sumber dapat disediakan untuk menghasilkan satu file PE dengan Ilasm.exe. Catatan: Pastikan bahwa baris kode terakhir dalam file sumber .il memiliki spasi kosong berikutnya atau karakter akhir baris.
Opsi Deskripsi
/32bitpreferred Membuat gambar pilihan 32-bit (PE32).
/alignment:integer Mengatur FileAlignment ke nilai yang ditentukan oleh integer di header Opsional NT. Jika direktif .alignment IL ditentukan dalam file, opsi ini akan mengambil alihnya.
/appcontainer Menghasilkan file .dll atau .exe yang berjalan di kontainer aplikasi Windows, sebagai output.
/arm Menentukan Mesin RISC Tingkat Lanjut (ARM) sebagai prosesor target.

Jika tidak ada bitness gambar yang ditentukan, defaultnya adalah /32bitpreferred.
/base:integer Mengatur ImageBase ke nilai yang ditentukan oleh integer di header Opsional NT. Jika direktif IL .imagebase ditentukan dalam file, opsi ini akan mengambil alihnya.
/clock Mengukur dan melaporkan waktu kompilasi berikut dalam milidetik untuk file sumber .il yang ditentukan:

Total Eksekusi: Total waktu yang dihabiskan untuk melakukan semua operasi tertentu yang mengikuti.

Startup: Memuat dan membuka file.

Memancarkan MD: Memancarkan metadata.

Ref ke Resolusi Def: Menyelesaikan referensi ke definisi dalam file.

Pembuatan File CEE: Menghasilkan gambar file dalam memori.

Penulisan File PE: Menulis gambar ke file PE.
/debug[:IMPL|OPT] Menyertakan informasi debug (variabel lokal dan nama argumen, dan nomor baris). Membuat file PDB.

/debug tanpa nilai tambahan menonaktifkan pengoptimalan JIT dan menggunakan titik urutan dari file PDB.

IMPL menonaktifkan pengoptimalan JIT dan menggunakan titik urutan implisit.

OPT memungkinkan pengoptimalan JIT dan menggunakan titik urutan implisit.
/dll Menghasilkan file .dll sebagai output.
/enc:file Membuat delta Edit dan Lanjutkan dari file sumber yang ditentukan.

Argumen ini hanya untuk penggunaan akademik dan tidak didukung untuk penggunaan komersial.
/exe Menghasilkan file yang dapat dieksekusi sebagai output. Ini adalah default.
/flags:integer Mengatur ImageFlags ke nilai yang ditentukan oleh integer di header runtime bahasa umum. Jika direktif .corflags IL ditentukan dalam file, opsi ini akan mengambil alihnya. Lihat CorHdr.h, COMIMAGE_FLAGS untuk daftar nilai yang valid untuk bilangan bulat.
/fold Melipat badan metode yang identik menjadi satu.
/highentropyva Menghasilkan executable output yang mendukung pengacakan tata letak ruang alamat entropi tinggi (ASLR). (Default untuk /appcontainer.)
/include:includePath Mengatur jalur untuk mencari file yang disertakan dengan #include.
/itanium Menentukan Intel Itanium sebagai prosesor target.

Jika tidak ada bitness gambar yang ditentukan, defaultnya adalah /pe64.
/key:keyFile Mengompilasi filename dengan tanda tangan yang kuat menggunakan kunci privat yang terkandung dalam keyFile.
/key: @keySource Mengompilasi filename dengan tanda tangan yang kuat menggunakan kunci privat yang diproduksi di keySource.
/listing Menghasilkan file daftar pada output standar. Jika Anda menghilangkan opsi ini, tidak ada file daftar yang diproduksi.

Parameter ini tidak didukung di .NET Framework 2.0 atau yang lebih baru.
/mdv:versionString Mengatur string versi metadata.
/msv:major.minor Mengatur versi aliran metadata, yang mana major dan minor merupakan bilangan bulat.
/noautoinherit Menonaktifkan pewarisan default dari Object saat tidak ada kelas dasar yang ditentukan.
/nocorstub Menekan pembuatan stub CORExeMain.
/nologo Menekan tampilan banner startup Microsoft.
/output:file.ext Menentukan nama dan ekstensi file output. Secara default, nama file output sama dengan nama file sumber pertama. Ekstensi default adalah .exe. Jika Anda menentukan opsi /dll, ekstensi defaultnya adalah.dll. Catatan: Menentukan /output:myfile.dll tidak mengatur opsi /dll. Jika Anda tidak menentukan /dll, hasilnya akan menjadi file yang dapat dieksekusi bernama myfile.dll.
/optimize Mengoptimalkan instruksi panjang untuk mempersingkat. Misalnya, br ke br.s.
/pe64 Membuat gambar 64-bit (PE32+).

Jika tidak ada prosesor target yang ditentukan, defaultnya adalah /itanium.
/pdb Membuat file PDB tanpa mengaktifkan pelacakan informasi debug.
/quiet Menentukan mode diam; tidak melaporkan kemajuan perakitan.
/resource:file.res Menyertakan file sumber daya yang ditentukan dalam format *.res dalam file .exe atau .dll yang dihasilkan. Hanya satu file .res yang dapat ditentukan dengan opsi /resource.
/ssver:int.int Mengatur nomor versi subsistem di header opsional NT. Untuk /appcontainer dan /arm, nomor versi minimum adalah 6.02.
/stack:stackSize Mengatur nilai SizeOfStackReserve di header Opsional NT ke stackSize.
/stripreloc Menentukan bahwa tidak ada relokasi dasar yang diperlukan.
/subsystem:integer Mengatur subsistem ke nilai yang ditentukan oleh integer di header Opsional NT. Jika direktif IL .subsystem ditentukan dalam file, perintah ini akan menggantikannya. Lihat winnt.h, IMAGE_SUBSYSTEM untuk daftar nilai yang valid untuk integer.
/x64 Menentukan prosesor AMD 64-bit sebagai prosesor target.

Jika tidak ada bitness gambar yang ditentukan, defaultnya adalah /pe64.
/? Menampilkan sintaks perintah dan opsi untuk alat ini.

Catatan

Semua opsi untuk Ilasm.exe tidak peka huruf besar/kecil dan dikenali oleh tiga huruf pertama. Misalnya, /lis setara dengan /listing dan /res:myresfile.res setara dengan /resource:myresfile.res. Opsi yang menentukan argumen menerima titik dua (:) atau tanda sama dengan (=) sebagai pemisah antara opsi dan argumen. Misalnya, /output:file.ext setara dengan /output=file.ext.

Keterangan

Prakit IL membantu vendor alat merancang dan mengimplementasikan pembuat IL. Menggunakan Ilasm.exe, alat dan pengembang kompilator dapat berkonsentrasi pada IL dan pembuatan metadata tanpa khawatir terhadap pemancaran IL dalam format file PE.

Mirip dengan kompilator lain yang menargetkan runtime, seperti C# dan Visual Basic, Ilasm.exe tidak menghasilkan file objek perantara dan tidak memerlukan tahap penautan untuk membentuk file PE.

Perakit IL dapat mengekspresikan semua fitur metadata dan IL yang ada dari bahasa pemrograman yang menargetkan runtime. Ini memungkinkan kode terkelola yang ditulis dalam salah satu bahasa pemrograman ini untuk dinyatakan secara memadai dalam Perakit IL dan dikompilasi dengan Ilasm.exe.

Catatan

Kompilasi mungkin gagal jika baris terakhir kode dalam file sumber .il tidak memiliki spasi kosong berikutnya atau karakter akhir baris.

Anda dapat menggunakan Ilasm.exe bersama dengan alat pendampingnya, Ildasm.exe. Ildasm.exe mengambil file PE yang berisi kode IL dan membuat file teks yang cocok sebagai input untuk Ilasm.exe. Ini berguna, misalnya, saat mengompilasi kode dalam bahasa pemrograman yang tidak mendukung semua atribut metadata runtime. Setelah mengompilasi kode dan menjalankan output melalui Ildasm.exe, file teks IL yang dihasilkan dapat diedit dengan tangan untuk menambahkan atribut yang hilang. Anda kemudian dapat menjalankan file teks ini melalui Ilasm.exe untuk menghasilkan file akhir yang dapat dieksekusi.

Anda juga dapat menggunakan teknik ini untuk menghasilkan satu file PE dari beberapa file PE yang awalnya dihasilkan oleh pengompilasi yang berbeda.

Catatan

Saat ini, Anda tidak dapat menggunakan teknik ini dengan file PE yang berisi kode asli yang disematkan (misalnya, file PE yang diproduksi oleh Visual C++).

Untuk membuat penggunaan gabungan Ildasm.exe dan Ilasm.exe seakurat mungkin, secara default perakit tidak menggantikan pengodean pendek untuk yang panjang yang mungkin telah Anda tulis di sumber IL Anda (atau yang mungkin dipancarkan oleh pengompilasi lain). Gunakan opsi /optimize untuk mengganti pengodean pendek sedapat mungkin.

Catatan

Ildasm.exe hanya beroperasi pada file pada disk. Ini tidak beroperasi pada file yang diinstal di cache perakitan global.

Untuk mengetahui informasi selengkapnya tentang tata bahasa IL, lihat file asmparse.grammar di SDK Windows.

Informasi Versi

Dimulai dengan .NET Framework 4.5, Anda dapat melampirkan atribut kustom ke implementasi antarmuka dengan menggunakan kode yang mirip dengan yang berikut ini:

.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 )
      …

Dimulai dengan .NET Framework 4.5, Anda dapat menentukan BLOB marsekal arbitrer (objek besar biner) dengan menggunakan representasi biner mentahnya, seperti yang ditunjukkan dalam kode berikut:

.method public hidebysig abstract virtual
        instance void
        marshal({ 38 01 02 FF })
        Test(object A_1) cil managed

Untuk mengetahui informasi selengkapnya tentang tata bahasa IL, lihat file asmparse.grammar di SDK Windows.

Contoh

Perintah berikut merakit file IL myTestFile.il dan menghasilkan myTestFile.exe yang dapat dieksekusi.

ilasm myTestFile

Perintah berikut merakit file IL myTestFile.il dan menghasilkan file .dllmyTestFile.dll.

ilasm myTestFile /dll

Perintah berikut merakit file IL myTestFile.il dan menghasilkan file .dllmyNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

Contoh kode berikut menunjukkan aplikasi yang sangat sederhana yang menampilkan "Halo Dunia!" ke konsol. Anda dapat mengompilasi kode ini lalu menggunakan alat Ildasm.exe untuk menghasilkan file IL.

using System;

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

Contoh kode IL berikut sesuai dengan contoh kode C# sebelumnya. Anda dapat mengompilasi kode ini ke dalam perakitan menggunakan alat Perakit IL. Contoh kode IL dan C# menampilkan "Halo Dunia!" ke konsol.

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

Lihat juga