Ildasm.exe (IL Ayrıştırıcı)

IL Disassembler, IL Assembler'a (Ilasm.exe) yardımcı bir araçtır. Ildasm.exe , ara dil (IL) kodu içeren taşınabilir bir yürütülebilir (PE) dosyası alır ve Ilasm.exegiriş olarak uygun bir metin dosyası oluşturur.

Bu araç, Visual Studio ile birlikte otomatik olarak yüklenir. Aracı çalıştırmak için Visual Studio Geliştirici Komut İstemi'ni veya Visual Studio Geliştirici PowerShell'i kullanın.

Komut satırına şunu yazın:

Sözdizimi

ildasm [options] [PEfilename] [options]

Parametreler

.exe, .dll, .obj, .lib ve .winmd dosyaları için aşağıdaki seçenekler kullanılabilir.

Seçenek Açıklama
/out=filename Sonuçları grafik kullanıcı arabiriminde görüntülemek yerine belirtilen filenameile bir çıkış dosyası oluşturur.
/Rtf Zengin metin biçiminde çıktılar üretir. /text seçeneğiyle geçersiz.
/Metin Sonuçları grafik kullanıcı arabiriminde veya çıktı dosyası olarak değil, konsol penceresinde görüntüler.
/Html HTML biçiminde çıktı üretir. Yalnızca /output seçeneğiyle geçerlidir.
/? Araç için komut sözdizimini ve seçenekleri görüntüler.

.exe, .dllve .winmd dosyaları için aşağıdaki ek seçenekler sağlanır.

Seçenek Açıklama
/Bayt Gerçek bayt miktarını yönerge yorumları olarak onaltılık biçimde gösterir.
/caverbal Sözlü biçimde özel öznitelik blob'ları üretir. Varsayılan ikili biçimdir.
/linenum Özgün kaynak satırları için başvurular içerir.
/nobar Parçalara ayırma işleminin ilerleme durumu açılır penceresini gizler.
/noca Özel özniteliklerin çıkışını gizler.
/Proje Meta verileri, yerel Windows Çalışma Zamanı göründüğü gibi değil yönetilen koda göründüğü şekilde görüntüler. Windows meta verileri (.winmd) dosyası değilsePEfilename, bu seçeneğin hiçbir etkisi yoktur. Bkz. Windows Mağazası Uygulamaları ve Windows Çalışma Zamanı için .NET Framework Desteği.
/pubonly Yalnızca genel türleri ve üyeleri ayrıştırır. /visibility:PUB ile eşdeğerdir.
/quoteallnames Tüm adları tek tırnak işaretleri içine alır.
/raweh Özel durum işleme yan tümcelerini ham biçimde gösterir.
/Kaynak Özgün kaynak satırları açıklamalar olarak gösterir.
/Belirteç -leri Sınıfların ve üyelerin meta veri belirteçlerini gösterir.
/Görünür -lük:vis [+vis...] Yalnızca belirtilen görünürlüğe sahip türleri veya üyeleri ayrıştırır. Aşağıdakiler için visgeçerli değerlerdir:

PUB — Genel

PRI — Özel

SSS — Aile

ASM — Derleme

FAA — Aile ve Montaj

FOA — Aile veya Montaj

PSC — Özel Kapsam

Bu görünürlük değiştiricilerinin tanımları için bkz MethodAttributes . ve TypeAttributes.

Aşağıdaki seçenekler yalnızca dosya veya konsol çıkışı için .exe, .dllve .winmd dosyaları için geçerlidir.

Seçenek Açıklama
/Tüm /header, /bytes, /stats, /classlist ve /tokens seçeneklerinin bir bileşimini belirtir.
/classlist Modülde tanımlanmış sınıfların bir listesini içerir.
/Ileri İleriye dönük sınıf bildirimini kullanır.
/Üstbilgi Çıktıya dosyanın başlık bilgilerini ekler.
/Öğe:class [::member [(sig]] Sağlanan bağımsız değişkene bağlı olarak aşağıdakileri ayrıştırır:

- Belirtilen classöğesini parçalara ayırıyor.
- Belirtilen member öğesinin ayrıştırmalarını sağlar class.
- belirtilen imza sigile öğesinin class öğesini parçalara ayırıyormember. Biçimi sig :
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Not .NET Framework sürüm 1.0 ve 1.1'de, sig ardından bir kapatma parantezi eklenmelidir: (sig). Net Framework 2.0'dan itibaren kapanış parantezi atlanmalıdır: (sig.
/Noil IL derlemesi kod çıktısını engeller.
/Istatistik Görüntüye istatistikleri ekler.
/typelist Gidiş dönüş içinde tür sıralamasını korumak üzere türlerin tam listesini oluşturur.
/Unicode Çıktı için Unicode kodlaması kullanır.
/utf8 Çıktı için UTF-8 kodlaması kullanır. ANSI varsayılandır.

Aşağıdaki seçenekler yalnızca dosya veya konsol çıkışı için .exe, .dll, .obj, .lib ve .winmd dosyaları için geçerlidir.

Seçenek Açıklama
/metadata[=specifier] Meta verileri gösterir, burada specifier :

MDHEADER — Meta veri üst bilgisi bilgilerini ve boyutlarını gösterir.

HEX — Bilgileri hem onaltılık hem de sözcüklerle gösterir.

CSV — Kayıt sayılarını ve yığın boyutlarını gösterir.

UNREX — Çözümlenmemiş dışları gösterir.

SCHEMA — Meta veri üst bilgisini ve şema bilgilerini gösterir.

RAW — Ham meta veri tablolarını gösterir.

HEAPS — Ham yığınları gösterir.

VALIDATE — Meta verilerin tutarlılığını doğrulayın.

/metadata öğesini birden çok kez belirtebilirsiniz ve için specifierfarklı değerler kullanabilirsiniz.

Aşağıdaki seçenekler yalnızca dosya veya konsol çıkışı için .lib dosyaları için geçerlidir.

Seçenek Açıklama
/objectfile=filename Belirtilen kitaplıkta tek bir nesne dosyasının meta verilerini gösterir.

Not

Ildasm.exe için tüm seçenekler büyük/küçük harfe duyarlı değildir ve ilk üç harf tarafından tanınır. Örneğin, /quo/quoteallnames ile eşdeğerdir. Bağımsız değişkenler belirten seçenekler, seçenek ve bağımsız değişken arasında ayıraç olarak ya iki nokta üst üste (:) ya da eşittir işaretini (=) kabul eder. Örneğin, /output:filename/ output=filename ile eşdeğerdir.

Açıklamalar

Ildasm.exe yalnızca disk üzerindeki PE dosyalarında çalışır. Genel bütünleştirilmiş kod önbelleğine yüklü olan dosyalar üzerinde çalışmaz.

Ildasm.exe tarafından üretilen metin dosyası IL Assembler'a giriş olarak kullanılabilir (Ilasm.exe). Bu örneğin, tüm çalışma zamanı meta veri özniteliklerini desteklemeyen bir programlama dilinde kod derlerken kullanışlıdır. Kodu derleyip çıktısını Ildasm.exearacılığıyla çalıştırdıktan sonra, sonuçta elde edilen IL metin dosyası eksik öznitelikleri eklemek için el ile düzenlenebilir. Ardından bu metin dosyasını IL Derleyicisi aracılığıyla çalıştırarak son bir çalıştırılabilir dosya oluşturabilirsiniz.

Not

Şu anda, bu tekniği gömülü yerel kod içeren (örneğin, Visual C++ tarafından üretilen PE dosyaları) PE dosyaları ile kullanamazsınız.

Meta veriyi ve varolan herhangi bir PE dosyasının ayrıştırılmış kodunu hiyerarşik bir ağaç görünümünde görüntülemek için varsayılan GUI'yi IL Ayrıştırıcısı'nda kullanabilirsiniz. GUI'yi kullanmak için, PEfilename bağımsız değişkenini veya herhangi bir seçeneği belirtmeden komut satırına ildasm yazın. Dosya menüsünden, Ildasm.exeyüklemek istediğiniz PE dosyasına gidebilirsiniz. Seçili PE için görüntülenen meta verileri ve ayrıştırılmış kodu kaydetmek için Dosya menüsünden Döküm komutunu seçin. Yalnızca hiyerarşik ağaç görünümünü kaydetmek için Dosya menüsünden Dump Treeview komutunu seçin. Dosyayı Ildasm.exe yükleme ve çıkışı yorumlama hakkında ayrıntılı bir kılavuz için Windows SDK ile birlikte gelen Örnekler klasöründe bulunan Ildasm.exe Öğreticisi'ne bakın.

Ildasm.exe katıştırılmış kaynaklar içeren bir PEfilename bağımsız değişkeni sağlarsanız, araç birden çok çıkış dosyası oluşturur: IL kodunu içeren bir metin dosyası ve her eklenmiş yönetilen kaynak için meta verilerden kaynağın adı kullanılarak oluşturulan bir .resources dosyası. Yönetilmeyen bir kaynak PEfilename içine eklenmişse, /output seçeneği tarafından IL çıkışı için belirtilen dosya adı kullanılarak bir .res dosyası oluşturulur.

Not

Ildasm.exe yalnızca .obj ve .lib giriş dosyaları için meta veri açıklamalarını gösterir. Bu dosya türleri için IL kodu ayrıştırılmaz.

Ildasm.exe an.exe veya .dll dosyası üzerinden çalıştırarak dosyanın yönetilip yönetilmediğini belirleyebilirsiniz. Dosya yönetilmiyorsa; araç, dosyada geçerli hiçbir ortak dil çalışma zamanı başlığı olmadığını ve ayrıştırılamayacağını belirten bir ileti görüntüler. Dosya yönetiliyorsa, araç başarıyla çalışır.

Sürüm Bilgileri

.NET Framework 4.5'den başlayarak ,Ildasm.exe ham ikili içeriği görüntüleyerek tanınmayan bir hazırlama BLOB'unu (ikili büyük nesne) işler. Örneğin aşağıdaki kod, bir C# programı tarafından oluşturulmuş sıralama BLOB'unun nasıl görüntülendiğini gösterir:

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

.NET Framework 4.5'ten başlayarak Ildasm.exe,Ildasm.exeçıktıdan aşağıdaki alıntıda gösterildiği gibi arabirim uygulamalarına uygulanan öznitelikleri görüntüler:

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

Örnekler

Aşağıdaki komut, PE dosyasının MyHello.exe meta verilerinin ve ayrıştırılmış kodun varsayılanIldasm.exe GUI'de görüntülenmesine neden olur.

ildasm myHello.exe

Aşağıdaki komut dosyayı MyFile.exe ayrıştırarak elde edilen IL Assembler metnini dosya MyFile.il depolar.

ildasm MyFile.exe /output:MyFile.il

Aşağıdaki komut dosyayı MyFile.exe ayrıştırarak elde edilen IL Assembler metnini konsol penceresinde görüntüler.

ildasm MyFile.exe /text

Dosya MyApp.exe eklenmiş yönetilen ve yönetilmeyen kaynaklar içeriyorsa, aşağıdaki komut dört dosya oluşturur: MyApp.il, MyApp.res, Icons.resources ve Message.resources:

ildasm MyApp.exe /output:MyApp.il

Aşağıdaki komut içindeki sınıfı MyClassMyFile.exe içindeki yöntemini MyMethod ayrıştırır ve çıkışı konsol penceresinde görüntüler.

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

Önceki örnekte, farklı imzalara sahip adlı MyMethod birkaç yöntem olabilir. Aşağıdaki komut, dönüş türü void olan örnek yöntemini MyMethod ve int32 ve dize parametre türlerini ayrıştırıyor.

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

Not

.NET Framework 1.0 ve 1.1 sürümlerinde, yöntem adını izleyen sol parantez, imzadan sonra sağ parantezle dengelenmelidir: MyMethod(instance void(int32)). .NET Framework 2.0'dan başlayarak kapanış parantezi atlanmalıdır: MyMethod(instance void(int32).

Bir static yöntemi (Shared Visual Basic'te yöntemi) almak için anahtar sözcüğünü instanceatla. gibi int32 ilkel türler olmayan ve string ad alanını içermesi gereken sınıf türleri, anahtar sözcüğünden classönce olmalıdır. Dış türlerin başına köşeli ayraçlar içinde kitaplık adı gelmelidir. Aşağıdaki komut, türünde bir parametresi olan ve dönüş türüne AppDomain sahip olan adlı MyMethod statik yöntemi ayrıştırırAppDomain.

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

İç içe geçmiş bir türün başında, eğik çizgi ile sınırlandırılmış kapsayan sınıfı bulunmalıdır. Örneğin, sınıfı adlı NestedClassiç içe bir sınıf içeriyorsa, MyNamespace.MyClass iç içe geçmiş sınıf şu şekilde tanımlanır: class MyNamespace.MyClass/NestedClass.

Ayrıca bkz.