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 istemine şunu yazın:
Sözdizimi
ilasm [options] filename [[options]filename...]
Parametreler
Bağımsız değişken | Açıklama |
---|---|
filename |
.il kaynak dosyasının adı. Bu dosya meta veri bildirim yönergeleri ve simgesel IL yönergelerinden oluşur. Ilasm.exe ile 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 olduğ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 belirtilen integer 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ı oluşturur. |
/kol | Hedef işlemci olarak Gelişmiş RISC Makinesi (ARM) belirtir. Görüntü bitliği belirtilmezse varsayılan değer /32bitpreferred olur. |
/taban: 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: Izleyen 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. Ref to Def Resolution: 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'ı 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. |
/katlamak | 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.) |
/kapsamak: includePath |
ile #include birlikte gelen dosyaları aramak için bir yol ayarlar. |
/itanium | 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 yer alan özel anahtarı kullanarak güçlü bir imzayla derlerkeyFile . |
/anahtar: @keySource |
filename adresinde keySource üretilen özel anahtarı kullanarak güçlü bir imzayla derler. |
/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. |
/çıktı: 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.dll adlı 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. |
/quiet | Sessiz modu belirtir; hiçbir derleme ilerlemesini bildirmez. |
/kaynak: file.res |
Elde edilen .exe veya .dll dosyasında belirtilen kaynak dosyasını *.res biçiminde içerir. /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 integer geçerli değerlerin 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, seçenek ve bağımsız değişken arasında ayırıcı olarak iki nokta üst üste (:) veya eşittir işareti (=) kabul eder. Ö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. Araç ve derleyici geliştiricileri, Ilasm.exe kullanarak, 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ğlama 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ılmış yönetilen kodun IL Assembler'da yeterince ifade edilmesini ve Ilasm.exe ile derlenmesini 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.exe ile birlikte kullanabilirsiniz. Ildasm.exe IL kodu içeren bir PE dosyası alır ve Ilasm.exe giriş 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.exe çalıştırdıktan sonra, sonuçta elde edilen IL metin dosyası eksik öznitelikleri eklemek için el ile düzenlenebilir. Daha sonra son yürütülebilir dosyayı oluşturmak için bu metin dosyasını Ilasm.exe çalıştırabilirsiniz.
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.
Ildasm.exe ve Ilasm.exe bu birleşik kullanımını mümkün olduğunca doğru hale getirmek için, varsayılan olarak derleyici, IL kaynaklarınızda yazmış olabileceğiniz uzun kodlamaların yerine kısa kodlamalar kullanmaz (veya başka bir derleyici tarafından yayılabilir). 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 Bilgisi
.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 sıralama BLOB'unu (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 yürütülebilir myTestFile.exe oluşturur.
ilasm myTestFile
Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myTestFile.dll oluşturur.
ilasm myTestFile /dll
Aşağıdaki komut IL dosyasını myTestFile.il bir araya getirerek .dll dosyasını myNewTestFile.dll oluş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 derlemede 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