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