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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk