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 filename ile 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 vis geç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 class değerini söker.member class - öğesini belirtilen imzayla sig sö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 specifier birden ç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ü instance
atla. gibi int32
ilkel türler olmayan sınıf string
türleri ad alanını içermelidir ve önce anahtar sözcüğünü class
iç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ı NestedClass
iç 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
.