Ildasm.exe (IL Disassembler)

IL Disassembler adalah alat pendamping untuk IL Assembler (Ilasm.exe). Ildasm.exe mengambil file portabel yang dapat dieksekusi (PE) yang berisi kode bahasa perantara (IL) dan membuat file teks yang cocok sebagai input untuk Ilasm.exe.

Alat ini secara 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

ildasm [options] [PEfilename] [options]

Parameter

Opsi berikut tersedia untuk .exe, .dll, .obj, .lib, dan .winmd file.

Opsi Deskripsi
/out=filename Membuat file keluaran dengan filename yang ditentukan, daripada menampilkan hasilnya dalam antarmuka pengguna grafis.
/rtf Menghasilkan output dalam format rich text. Tidak valid dengan opsi /text.
/text Menampilkan hasil ke jendela konsol, bukan di antarmuka pengguna grafis atau sebagai file output.
/html Menghasilkan output dalam format HTML. Hanya valid dengan opsi /output.
/? Menampilkan sintaks perintah dan opsi untuk alat.

Opsi tambahan berikut tersedia untuk file .exe, .dll, dan .winmd.

Opsi Deskripsi
/bytes Menampilkan byte aktual, dalam format heksadesimal, sebagai komentar instruksi.
/caverbal Menghasilkan gumpalan atribut khusus dalam bentuk verbal. Standarnya adalah bentuk biner.
/linenum Termasuk referensi ke baris sumber asli.
/nobar Menekan jendela pop-up indikator kemajuan pembongkaran.
/noca Menekan output atribut khusus.
/project Menampilkan metadata seperti yang terlihat pada kode terkelola, bukan seperti yang muncul di Windows Runtime asli. Jika PEfilename bukan file metadata Windows (.winmd), opsi ini tidak akan berpengaruh. Lihat .NET Framework Support untuk Aplikasi Windows Store dan Windows Runtime.
/pubonly Membongkar hanya jenis dan anggota publik. Setara dengan /visibility:PUB.
/quoteallnames Termasuk semua nama dalam tanda kutip tunggal.
/raweh Menunjukkan klausul penanganan pengecualian dalam bentuk mentah.
/source Menampilkan baris sumber asli sebagai komentar.
/tokens Menampilkan token metadata kelas dan anggota.
/visibility:vis[+vis...] Membongkar hanya tipe atau anggota dengan visibilitas yang ditentukan. Berikut ini adalah nilai yang valid untuk vis:

PUB — Publik

PRI — Pribadi

FAM — Keluarga

ASM — Rakitan

FAA — Keluarga dan Rakitan

FOA — Keluarga atau Rakitan

PSC — Lingkup Pribadi

Untuk definisi pengubah visibilitas ini, lihat MethodAttributes dan TypeAttributes.

Opsi berikut berlaku untuk file .exe, .dll, dan .winmd untuk file atau keluaran konsol saja.

Opsi Deskripsi
/all Menentukan kombinasi /header, /bytes, /stats, /classlist, dan /tokens pilihan.
/classlist Termasuk daftar kelas yang didefinisikan dalam modul.
/forward Menggunakan deklarasi kelas maju.
/headers Termasuk informasi header file dalam output.
/item:class[::member[(sig]] Membongkar berikut ini tergantung pada argumen yang diberikan:

- Membongkar class yang ditentukan.
- Membongkar member dari class yang ditentukan.
- Membongkar member dari class dengan tanda tangan yang ditentukan sig. Format sig adalah:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Catatan Dalam .NET Framework versi 1.0 dan 1.1, sig harus diikuti oleh tanda kurung penutup: (sig). Mulai dari Net Framework 2.0, tanda kurung penutup harus dihilangkan: (sig.
/noil Menekan keluaran kode perakitan IL.
/stats Termasuk statistik pada gambar.
/typelist Menghasilkan daftar lengkap jenis, untuk mempertahankan pemesanan jenis dalam perjalanan pulang pergi.
/unicode Menggunakan pengkodean Unicode untuk output.
/utf8 Menggunakan pengkodean UTF-8 untuk output. ANSI adalah default.

Opsi berikut berlaku untuk .exe, .dll, .obj, .lib, dan .winmd file untuk file atau keluaran konsol saja.

Opsi Deskripsi
/metadata[=specifier] Menampilkan metadata, dimana specifier adalah:

MDHEADER — Menampilkan informasi dan ukuran header metadata.

HEX — Menampilkan informasi dalam heksa dan words.

CSV — Menampilkan jumlah catatan dan ukuran tumpukan.

UNREX — Menampilkan eksternal yang belum terselesaikan.

SCHEMA — Menampilkan header metadata dan informasi skema.

RAW — Menampilkan tabel metadata mentah.

HEAPS — Menampilkan tumpukan mentah.

VALIDATE — Memvalidasi konsistensi metadata.

Anda dapat menentukan /metadata beberapa kali, dengan nilai yang berbeda untuk specifier.

Opsi berikut hanya berlaku untuk file .lib untuk file atau keluaran konsol.

Opsi Deskripsi
/objectfile=filename Memperlihatkan metadata dari file objek tunggal di pustaka yang ditentukan.

Catatan

Semua opsi untuk Ildasm.exe tidak peka huruf besar-kecil dan dikenali oleh tiga huruf pertama. Misalnya, /quo sama dengan /quoteallnames. Opsi yang menentukan argumen menerima tanda titik dua (:) atau sama dengan (=) sebagai pemisah antara opsi dan argumen. Misalnya, /output:filename sama dengan /output=filename.

Keterangan

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

File teks yang dihasilkan oleh Ildasm.exe dapat digunakan sebagai masukan ke IL Assembler (Ilasm.exe). Ini berguna, misalnya, saat mengkompilasi kode dalam bahasa pemrograman yang tidak mendukung semua atribut metadata runtime. Setelah mengkompilasi kode dan menjalankan outputnya melalui Ildasm.exe, file teks IL yang dihasilkan dapat diedit secara manual untuk menambahkan atribut yang hilang. Anda kemudian dapat menjalankan file teks ini melalui IL Assembler untuk menghasilkan file akhir yang dapat dieksekusi.

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

Anda dapat menggunakan GUI default di IL Disassembler untuk melihat metadata dan kode yang dibongkar dari file PE yang ada dalam tampilan pohon hierarki. Untuk menggunakan GUI, ketik ildasm pada baris perintah tanpa memberikan argumen PEfilename atau opsi apa pun. Dari menu File, Anda dapat menavigasi ke file PE yang ingin Anda muat ke Ildasm.exe. Untuk menyimpan metadata dan kode yang dibongkar yang ditampilkan untuk PP yang dipilih, pilih perintah Dump dari menu File. Untuk menyimpan tampilan hierarki saja, pilih perintah Dump Treeview dari menu File. Untuk panduan terperinci untuk memuat file ke Ildasm.exe dan menafsirkan hasilnya, lihat Tutorial Ildasm.exe, yang terletak di folder Samples yang dikirimkan bersama Windows SDK.

Jika Anda memberikan Ildasm.exe argumen PEfilename yang berisi sumber daya yang disematkan, alat akan menghasilkan beberapa file keluaran: file teks yang berisi kode IL dan, untuk setiap sumber daya terkelola yang disematkan, .resources file yang dihasilkan menggunakan nama resource dari metadata. Jika sumber daya yang tidak dikelola disematkan di PEfilename, file .res dibuat menggunakan nama file yang ditentukan untuk keluaran IL dengan opsi /output.

Catatan

Ildasm.exe hanya menampilkan deskripsi metadata untuk file masukan .obj dan .lib. Kode IL untuk jenis file ini tidak dibongkar.

Anda dapat menjalankan Ildasm.exe melalui file an.exe atau .dll untuk menentukan apakah file tersebut dikelola. Jika file tidak dikelola, alat akan menampilkan pesan yang menyatakan bahwa file tidak memiliki header runtime bahasa umum yang valid dan tidak dapat dibongkar. Jika file dikelola, alat berjalan dengan sukses.

Informasi Versi

Dimulai dengan .NET Framework 4.5, Ildasm.exe menangani BLOB marshal (objek besar biner) yang tidak dikenal dengan menampilkan konten biner mentah. Misalnya, kode berikut menunjukkan bagaimana BLOB marshal yang dihasilkan oleh program C# ditampilkan:

public void Test([MarshalAs((short)70)] int test) { }
// IL from Ildasm.exe output
.method public hidebysig instance void Test(int32  marshal({ 46 }) test) cil managed

Dimulai dengan .NET Framework 4.5, Ildasm.exe menampilkan atribut yang diterapkan ke implementasi antarmuka, seperti yang ditunjukkan dalam kutipan berikut dari output Ildasm.exe:

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

Contoh

Perintah berikut menyebabkan metadata dan kode yang dibongkar untuk file PE MyHello.exe ditampilkan di GUI default Ildasm.exe.

ildasm myHello.exe

Perintah berikut membongkar file MyFile.exe dan menyimpan teks IL Assembler yang dihasilkan dalam file MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Perintah berikut membongkar file MyFile.exe dan menampilkan teks IL Assembler yang dihasilkan ke jendela konsol.

ildasm MyFile.exe /text

Jika file MyApp.exe berisi sumber daya terkelola dan tidak terkelola yang disematkan, perintah berikut menghasilkan empat file: MyApp.il, MyApp.res, Icons.resources, dan Message.resources:

ildasm MyApp.exe /output:MyApp.il

Perintah berikut membongkar metode MyMethod dalam kelas MyClass di MyFile.exe dan menampilkan output ke jendela konsol.

ildasm /item:MyClass::MyMethod MyFile.exe /text

Pada contoh sebelumnya, mungkin ada beberapa metode bernama MyMethod dengan tanda tangan yang berbeda. Perintah berikut membongkar metode instans MyMethod dengan tipe kembalian void dan tipe parameter int32 dan string.

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text

Catatan

Dalam .NET Framework versi 1.0 dan 1.1, tanda kurung kiri yang mengikuti nama metode harus diimbangi dengan tanda kurung kanan setelah tanda tangan: MyMethod(instance void(int32)). Mulai dari .NET Framework 2.0, tanda kurung penutup harus dihilangkan: MyMethod(instance void(int32).

Untuk mengambil metode static (metode Shared dalam Visual Basic), hilangkan kata kunci instance. Jenis kelas yang bukan jenis primitif seperti int32 dan string harus menyertakan namespace dan harus didahului dengan kata kunci class. Jenis eksternal harus didahului dengan nama pustaka dalam tanda kurung siku. Perintah berikut membongkar metode statis bernama MyMethod yang memiliki satu parameter jenis AppDomain dan memiliki jenis kembalian AppDomain.

ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text

Jenis bersarang harus didahului oleh kelas yang memuatnya, dibatasi oleh garis miring. Misalnya, jika kelas MyNamespace.MyClass berisi kelas bersarang bernama NestedClass, kelas bersarang diidentifikasi sebagai berikut: class MyNamespace.MyClass/NestedClass.

Lihat juga