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 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, .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 vis geç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 sig ile öğ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 specifier farklı 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ı MyClass
MyFile.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ü instance
atla. 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ı NestedClass
iç 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin