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.exe giriş 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 istemine ş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, .dll ve .winmd dosyaları için aşağıdaki ek seçenekler kullanılabilir.

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ünme şekli yerine 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.
/visibility: 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 Bütünleştirilmiş Kod

FOA — Aile veya Derleme

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, .dll ve .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.
/iletmek İleriye dönük sınıf bildirimini kullanır.
/Üstbilgi Çıktıya dosyanın başlık bilgilerini ekler.
/item: class[:: member[(sig]] Sağlanan bağımsız değişkene bağlı olarak aşağıdakileri ayrıştırır:

- Belirtilen classöğesini söker.
- belirtilen member classdeğerini söker.
member class- öğesini belirtilen imzayla sigsöker. biçimi sig şu şekildedir:
[instance] returnType(parameterType1, parameterType2, ..., parameterTypeN)
Not.NET Framework 1.0 ve 1.1 sürümlerinde, sig ardından bir kapatma parantezi eklenmelidir: (sig). Net Framework 2.0'dan başlayarak kapatma 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.

/meta verileri için farklı değerlerle specifierbirden çok kez belirtebilirsiniz.

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: dosya adı /output= dosya adıyla 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 (Ilasm.exe) giriş olarak kullanılabilir. 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.exe ç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.exe yü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. Bir 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 eklenen her 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 çıktısı 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 Bilgisi

.NET Framework 4.5'den başlayarak, Ildasm.exe ham ikili içeriği görüntüleyerek tanınmayan bir sıralama 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 Ildasm.exe varsayılan 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 sonuçta elde edilen IL Assembler metnini konsol penceresine 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ı MyClass MyFile.exe içindeki yöntemini MyMethod ayrıştırır ve çıkışı konsol penceresine 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 ve int32 ve dize parametre türleriyle örnek yöntemini MyMethod parçalara ayırır.

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 kapatma 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 sınıf string türleri ad alanını içermelidir ve önce anahtar sözcüğünü classiçermelidir. 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 AppDomainsahip olan adlı MyMethod statik yöntemi parçalara ayırır.

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, MyNamespace.MyClass sınıfı adlı NestedClassiç içe geçmiş bir sınıf içeriyorsa, iç içe geçmiş sınıf şu şekilde tanımlanır: class MyNamespace.MyClass/NestedClass.

Ayrıca bkz.