Ilasm.exe (IL Derleyici)
IL Assembler, ara dil (IL) derlemesinden taşınabilir bir yürütülebilir (PE) dosyası oluşturur. (IL hakkında daha fazla bilgi için bkz. Yönetilen Yürütme İşlemi.) IL'nin beklendiği gibi çalışıp çalışmadığını belirlemek için IL ve gerekli meta verileri içeren sonuçta elde edilen yürütülebilir dosyayı çalıştırabilirsiniz.
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
ilasm [options] filename [[options]filename...]
Parametreler
Bağımsız Değişken | Description |
---|---|
filename |
.il kaynak dosyasının adı. Bu dosya meta veri bildirim yönergeleri ve simgesel IL yönergelerinden oluşur. Ilasm.exeile tek bir PE dosyası oluşturmak için birden çok kaynak dosya bağımsız değişkeni sağlanabilir. Not: .il kaynak dosyasındaki son kod satırının sonunda boşluk veya satır sonu karakteri bulunduğundan emin olun. |
Seçenek | Açıklama |
---|---|
/32bitpreferred | 32 bit tercih edilen bir görüntü (PE32) oluşturur. |
/Hizalama:integer |
FileAlignment değerini NT İsteğe Bağlı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .alignment IL yönergesi dosyada belirtiliyorsa, bu seçenek onu geçersiz kılar. |
/appcontainer | Çıktı olarak Windows uygulama kapsayıcısında çalışan bir .dll veya .exe dosyası üretir. |
/Kol | Hedef işlemci olarak Gelişmiş RISC Makinesi (ARM) belirtir. Görüntü bitliği belirtilmezse varsayılan değer /32bitpreferred olur. |
/Temel:integer |
ImageBase'i NT İsteğe Bağlı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .imagebase IL yönergesi dosyada belirtiliyorsa, bu seçenek onu geçersiz kılar. |
/Saat | Belirtilen .il kaynak dosyası için aşağıdaki derleme sürelerini milisaniye cinsinden ölçer ve raporlar: Toplam Çalıştırma: İzleyen tüm belirli işlemleri gerçekleştirmek için harcanan toplam süre. Başlangıç: Dosyayı yükleme ve açma. MD Yayma: Meta verileri yayma. Başv- Def Çözümlemesi: Dosyadaki tanımlara yapılan başvuruları çözümleme. CEE Dosya Oluşturma: Bellekte dosya görüntüsü oluşturuluyor. PE Dosyası Yazma: Görüntüyü PE dosyasına yazma. |
/debug[:IMPL|OPT] | Hata ayıklama bilgisi içerir (yerel değişken ve bağımsız değişken adları ve satır numaraları). Bir PDB dosyası oluşturur. Ek değer olmadan /debug, JIT iyileştirmesini devre dışı bırakır ve PDB dosyasındaki sıra noktalarını kullanır. IMPL , JIT iyileştirmesini devre dışı bırakır ve örtük dizi noktaları kullanır. OPT , JIT iyileştirmesini etkinleştirir ve örtük dizi noktaları kullanır. |
/Dll | Çıktı olarak bir.dll dosyası oluşturur. |
/Enc:file |
Belirtilen kaynak dosyasından Düzenle ve Devam Et deltaları oluşturur. Bu bağımsız değişken yalnızca akademik amaçlıdır ve ticari kullanım için desteklenmez. |
/Exe | Çıktı olarak bir yürütülebilir dosya oluşturur. Bu varsayılan seçenektir. |
/Bayrak:integer |
ImageFlags değerini ortak dil çalışma zamanı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .corflags IL yönergesi dosyada belirtiliyorsa, bu seçenek onu geçersiz kılar. Tamsayı için geçerli değerlerin listesi için bkz. CorHdr.h, COMIMAGE_FLAGS. |
/Kat | Eşdeğer metot gövdelerini tek bir gövde olarak katlar. |
/highentropyva | Yüksek entropili adres alanı düzenini (ASLR) destekleyen bir çıktı çalıştırılabilir dosyası oluşturur. ( /appcontainer için varsayılan.) |
/Içerir:includePath |
ile #include birlikte gelen dosyaları aramak için bir yol ayarlar. |
/ıtanium | Hedef işlemci olarak Intel Itanium belirtir. Görüntü bitliği belirtilmezse varsayılan değer /pe64'dür. |
/Anahtar:keyFile |
filename içinde bulunan özel anahtarı kullanarak güçlü bir imzayla derlerkeyFile . |
/Anahtar: @keySource |
adresinde keySource üretilen özel anahtarı kullanarak güçlü bir imzayla derlerfilename . |
/Liste | Standart çıktıda bir listeleme dosyası oluşturur. Eğer bu seçeneği koymazsanız, listeleme dosyası oluşturulmaz. Bu parametre .NET Framework 2.0 ve sonrasında desteklenmez. |
/mdv:versionString |
Meta veri sürümü dizesini ayarlar. |
/msv:major .minor |
Meta veri akışı sürümünü ayarlar; burada major ve minor tamsayılardır. |
/noautoinherit | Hiçbir temel sınıf belirtilmediğinde varsayılan Object devralmayı devre dışı bırakır. |
/nocorstub | CORExeMain taslağının oluşturulmasını bastırır. |
/nologo | Microsoft başlangıç başlığı görüntüsünü bastırır. |
/Çıkış:file.ext |
Çıktı dosyası adını ve uzantısını belirtir. Varsayılan olarak, çıktı dosyası adı ilk kaynak dosyasının adıyla aynıdır. Varsayılan uzantı .exe. /dll seçeneğini belirtirseniz, varsayılan uzantı .dll. Not:/output:myfile.dll belirtilmesi /dll seçeneğini ayarlamaz. /dll belirtmezseniz, sonuç myfile.dlladlı yürütülebilir bir dosya olur. |
/Optimize | Uzun yönergeleri kısa olarak iyileştirir. Örneğin, br için br.s . |
/pe64 | 64 bitlik bir görüntü oluşturur (PE32+). Hedef işlemci belirtilmezse, varsayılan değer olur /itanium . |
/Pdb | Hata ayıklama bilgisi izlemeyi etkinleştirmeden bir PDB dosyası oluşturur. |
/Sessiz | Sessiz modu belirtir; hiçbir derleme ilerlemesini bildirmez. |
/Kaynak:file.res |
Belirtilen kaynak dosyasını elde edilen .exe veya .dll dosyasına *.res biçiminde ekler. /resource seçeneğiyle yalnızca bir .res dosyası belirtilebilir. |
/ssver:int .int |
NT isteğe bağlı üst bilgisinde alt sistem sürümünü ayarlar. /appcontainer ve /arm için en düşük sürüm numarası 6,02'dir. |
/Yığın:stackSize |
NT İsteğe Bağlı üst bilgisindeki SizeOfStackReserve değerini olarak stackSize ayarlar. |
/stripreloc | Temel yeniden konumlandırmanın gerekmediğini belirtir. |
/Alt:integer |
Alt sistemi NT İsteğe Bağlı üst bilgisinde tarafından integer belirtilen değere ayarlar. Eğer .subsystem IL yönergesi dosyada belirtiliyorsa, bu komut onu geçersiz kılar. için geçerli değerlerin integer listesi için bkz. winnt.h, IMAGE_SUBSYSTEM. |
/x64 | Hedef işlemci olarak bir 64 bitlik AMD işlemci belirtir. Görüntü bitliği belirtilmezse, varsayılan değer /pe64'dür. |
/? | Araç için komut sözdizimini ve seçenekleri görüntüler. |
Not
Ilasm.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, /lis/listing ile eşdeğerdir ve /res:myresfile.res /resource:myresfile.res ile eşdeğerdir. Bağımsız değişkenleri belirten seçenekler iki nokta üst üste (:) veya seçenek ile bağımsız değişken arasındaki ayırıcı olarak eşittir işareti (=) yazın. Örneğin, /output:file.ext, /output=file.ext ile eşdeğerdir.
Açıklamalar
IL Derleyicisi araç satıcılarına IL oluşturucuları tasarlamaları ve uygulamaları için yardımcı olur. Ilasm.exekullanarak, araç ve derleyici geliştiricileri IL'yi PE dosya biçiminde yayma konusunda endişelenmeden IL ve meta veri üretmeye odaklanabilir.
C# ve Visual Basic gibi çalışma zamanını hedefleyen diğer derleyicilere benzer şekilde ,Ilasm.exe ara nesne dosyaları üretmez ve PE dosyası oluşturmak için bir bağlantı aşaması gerektirmez.
IL Derleyicisi, çalışma zamanını hedef alan programlama dillerinin tüm varolan meta veri ve IL özelliklerini ifade edebilir. Bu, bu programlama dillerinden herhangi birinde yazılan yönetilen kodun IL Assembler'da yeterli şekilde ifade edilmesini ve Ilasm.exeile derlenebilmelerini sağlar.
Not
Eğer .il kaynak dosyasının son kod satırında bir boşluk veya satır sonu karakteri yoksa derleme başarısız olabilir.
Ilasm.exe yardımcı aracıIldasm.exeile birlikte kullanabilirsiniz . Ildasm.exe IL kodunu içeren bir PE dosyası alır ve Ilasm.exegiriş olarak uygun bir metin dosyası oluşturur. Bu örneğin, tüm çalışma zamanı meta veri özniteliklerini desteklemeyen bir programlama dilinde kod derlerken kullanışlıdır. Kodu derleyip çıkışı 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ı Ilasm.exe aracılığıyla çalıştırarak son yürütülebilir dosyayı oluşturabilirsiniz.
Bu tekniği kullanarak ayrı derleyiciler tarafından üretilen çeşitli PE dosyalarından tek bir PE dosyası 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.
BuIldasm.exe ve Ilasm.exe kullanımını mümkün olduğunca doğru hale getirmek için, derleyici varsayılan olarak IL kaynaklarınızda yazmış olabileceğiniz uzun kodlamalar (veya başka bir derleyici tarafından yayılabilir) için kısa kodlamalar yerine geçmez. Kısa kodlamaları mümkün olduğunca değiştirmek için /optimize seçeneğini kullanın.
Not
Ildasm.exe yalnızca disk üzerindeki dosyalar üzerinde çalışır. Genel bütünleştirilmiş kod önbelleğine yüklü olan dosyalar üzerinde çalışmaz.
IL'nin dil bilgisi hakkında daha fazla bilgi için Windows SDK'sında asmparse.grammar dosyasına bakın.
Sürüm Bilgileri
.NET Framework 4.5'den başlayarak, aşağıdakine benzer bir kod kullanarak arabirim uygulamasına özel bir öznitelik ekleyebilirsiniz:
.class interface public abstract auto ansi IMyInterface
{
.method public hidebysig newslot abstract virtual
instance int32 method1() cil managed
{
} // end of method IMyInterface::method1
} // end of class IMyInterface
.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 )
…
.NET Framework 4.5'den başlayarak, aşağıdaki kodda gösterildiği gibi ham ikili gösterimini kullanarak rastgele bir hazırlama BLOB'u (ikili büyük nesne) belirtebilirsiniz:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
IL'nin dil bilgisi hakkında daha fazla bilgi için Windows SDK'sında asmparse.grammar dosyasına bakın.
Örnekler
Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek myTestFile.exeyürütülebilir dosyasını üretir.
ilasm myTestFile
Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myTestFile.dlloluşturur.
ilasm myTestFile /dll
Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myNewTestFile.dlloluşturur.
ilasm myTestFile /dll /output:myNewTestFile.dll
Aşağıdaki kod örneği, konsolda "Merhaba Dünya!" görüntüleyen son derece basit bir uygulamayı gösterir. Bu kodu derleyebilir ve ardından Ildasm.exe aracını kullanarak bir IL dosyası oluşturabilirsiniz.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Aşağıdaki IL kod örneği önceki C# kod örneğine karşılık gelir. IL Assembler aracını kullanarak bu kodu bir derlemeye derleyebilirsiniz. Hem IL hem de C# kod örnekleri konsolda "Merhaba Dünya!" görüntüler.
// Metadata version: v2.0.50215
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly sample
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x02F20000
// =============== CLASS MEMBERS DECLARATION ===================
.class public auto ansi beforefieldinit Hello
extends [mscorlib]System.Object
{
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Hello::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Hello::.ctor
} // end of class Hello
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