Ildasm.exe (IL-szétszerelt)
Az IL-szétszerelő az IL-összeszerelő (Ilasm.exe) kiegészítő eszköze. Ildasm.exe egy hordozható végrehajtható (PE) fájlt használ, amely köztes nyelvi (IL) kódot tartalmaz, és létrehoz egy olyan szövegfájlt, amely alkalmas a Ilasm.exe bemenetére.
Ez az eszköz automatikusan telepítve van a Visual Studióval. Az eszköz futtatásához használja a Visual Studio fejlesztői parancssorát vagy a Visual Studio Developer PowerShellt.
A parancssorba írja be a következőt:
Syntax
ildasm [options] [PEfilename] [options]
Paraméterek
A következő lehetőségek érhetők el .exe, .dll, .obj, .lib és .winmd fájlokhoz.
Lehetőség | Leírás |
---|---|
/out= filename |
A megadott filename kimeneti fájl létrehozása ahelyett, hogy grafikus felhasználói felületen jeleníti meg az eredményeket. |
/Rtf | Rich Text formátumban állítja elő a kimenetet. Érvénytelen a /text beállítással. |
/SMS | Az eredményeket nem grafikus felhasználói felületen, hanem kimeneti fájlként jeleníti meg a konzolablakban. |
/html | Html formátumban állítja elő a kimenetet. Csak a /output beállítással érvényes. |
/? | Megjeleníti az eszköz parancsszintaxisát és beállításait. |
A következő további lehetőségek érhetők el .exe, .dll és .winmd fájlokhoz.
Lehetőség | Leírás |
---|---|
/Bájt | A tényleges bájtokat hexadecimális formátumban jeleníti meg utasítás-megjegyzésekként. |
/caverbal | Egyéni attribútumblobokat hoz létre verbális formában. Az alapértelmezett bináris űrlap. |
/linenum | Az eredeti forrásvonalakra mutató hivatkozásokat tartalmaz. |
/nobar | Letiltja a szétszerelési folyamatjelző előugró ablakát. |
/noca | Letiltja az egyéni attribútumok kimenetét. |
/projekt | A metaadatokat a felügyelt kódban megjelenő módon jeleníti meg a natív Windows-futtatókörnyezet helyett. Ha PEfilename nem Windows-metaadatfájl (.winmd), akkor ez a beállítás nincs hatással. Lásd: .NET-keretrendszer Windows Áruházbeli alkalmazások és Windows-futtatókörnyezet támogatása. |
/pubonly | Csak a nyilvános típusok és tagok szétszerelése. Egyenértékű a /visibility:PUB értékekkel. |
/quoteallnames | Az összes nevet egyetlen idézőjelben tartalmazza. |
/raweh | A kivételkezelési záradékokat nyers formában jeleníti meg. |
/forrás | Az eredeti forrássorokat megjegyzésekként jeleníti meg. |
/Tokenek | Az osztályok és tagok metaadat-jogkivonatait jeleníti meg. |
/láthatóság: vis [+vis ...] |
Csak a megadott láthatóságú típusok vagy tagok szétszerelése. A következő értékek érvényesek a következőre vis :PUB – Nyilvános PRI – Privát FAM – Család ASM – Szerelvény FAA – Család és közgyűlés FOA – Család vagy közgyűlés PSC – Privát hatókör A láthatósági módosítók definícióit lásd MethodAttributes és TypeAttributes. |
Az alábbi beállítások csak .exe, .dll és .winmd fájlokra érvényesek csak fájl- vagy konzolkimenet esetén.
Lehetőség | Leírás |
---|---|
/összes | A /header, /bytes, /stats, /classlist és /tokens beállítások kombinációját adja meg. |
/classlist | Tartalmazza a modulban definiált osztályok listáját. |
/előre | Továbbítási osztály deklarációt használ. |
/Fejlécek | Fájlfejlécadatokat tartalmaz a kimenetben. |
/item: class [:: member [(sig ]] |
A megadott argumentumtól függően bontsa szét a következőket: - Szétszereli a megadott class .- Szétszereli a megadott member class .- Szétszereli class a member megadott aláírástsig . A formátum a sig következő:[ instance ] returnType (parameterType1 , parameterType2 , ..., parameterTypeN )Megjegyzés: Az .NET-keretrendszer 1.0-s és 1.1-s sig verzióiban egy záró zárójelet kell követni: (sig) . A Net Framework 2.0-tól kezdve a záró zárójelet ki kell hagyni: (sig . |
/noil | Letiltja az IL szerelvénykód kimenetét. |
/statisztika | A kép statisztikáit tartalmazza. |
/typelist | Létrehozza a típusok teljes listáját, hogy megőrizze a típusrendezést egy oda-vissza utazás során. |
/unicode | Unicode kódolást használ a kimenethez. |
/utf8 | UTF-8 kódolást használ a kimenethez. Az ANSI az alapértelmezett. |
A következő beállítások csak .exe, .dll, .obj, .lib és .winmd fájlokra érvényesek a fájl- vagy konzolkimenethez.
Lehetőség | Leírás |
---|---|
/metadata[=specifier ] |
Metaadatokat jelenít meg, hol specifier :MDHEADER – A metaadatok fejlécadatainak és méreteinek megjelenítése. HEX – Az információk megjelenítése hexában és szavakban is. CSV – A rekordszám és a halomméret megjelenítése. UNREX – Megoldatlan külsők megjelenítése. SÉMA – A metaadatok fejlécének és sémaadatainak megjelenítése. RAW – A nyers metaadattáblák megjelenítése. HEAPS – A nyers halom megjelenítése. ÉRVÉNYESSÉG – A metaadatok konzisztenciájának ellenőrzése. A /metadata értéket többször is megadhatja, és különböző értékeket adhat meg a következőhöz specifier : . |
Az alábbi beállítások csak a fájl- vagy konzolkimenethez tartozó .lib fájlokra érvényesek.
Lehetőség | Leírás |
---|---|
/objectfile=filename |
Egyetlen objektumfájl metaadatait jeleníti meg a megadott tárban. |
Feljegyzés
A Ildasm.exe minden lehetősége megkülönbözteti a kis- és nagybetűket, és az első három betű felismeri. A /quo például egyenértékű a /quoteallnames névkkel. Az argumentumokat meghatározó beállítások kettőspontot (:) vagy egyenlőségjelet (=) fogadnak el elválasztóként a lehetőség és az argumentum között. A /output: fájlnév például a /output= fájlnévnek felel meg.
Megjegyzések
Ildasm.exe csak lemezen lévő PE-fájlokon működik. Nem működik a globális szerelvény-gyorsítótárban telepített fájlokon.
A Ildasm.exe által létrehozott szövegfájl használható az IL-összeállító (Ilasm.exe) bemeneteként. Ez például akkor hasznos, ha olyan programozási nyelven állít össze kódot, amely nem támogatja az összes futtatókörnyezeti metaadat-attribútumot. A kód összeállítása és a kimenet Ildasm.exe keresztüli futtatása után az eredményül kapott IL-szövegfájl kézzel szerkeszthető a hiányzó attribútumok hozzáadásához. Ezután futtathatja ezt a szövegfájlt az IL-összeállítón keresztül egy végleges végrehajtható fájl létrehozásához.
Feljegyzés
Jelenleg nem használhatja ezt a technikát beágyazott natív kódot tartalmazó PE-fájlokkal (például a Visual C++ által létrehozott PE-fájlokkal).
Az IL-szétszerelő alapértelmezett grafikus felhasználói felületével megtekintheti a meglévő PE-fájlok metaadatait és szétszerelt kódját hierarchikus fanézetben. A grafikus felhasználói felület használatához írja be az ildasm parancsot a parancssorba a PEfilename argumentum vagy bármely beállítás megadása nélkül. A Fájl menüben navigálhat a Ildasm.exe betölteni kívánt PE-fájlhoz. A kijelölt PE-hez megjelenített metaadatok és szétszerelt kód mentéséhez válassza a Fájl menü Memóriakép parancsát. Ha csak a hierarchikus fanézetet szeretné menteni, válassza a Fájl menüBen a Dump Treeview parancsot. A fájl Ildasm.exe való betöltéséhez és a kimenet értelmezéséhez részletes útmutatót a Windows SDK-t tartalmazó Minták mappában található Ildasm.exe oktatóanyagban talál.
Ha beágyazott erőforrásokat tartalmazó PEfilename argumentumot ad meg Ildasm.exe, az eszköz több kimeneti fájlt hoz létre: egy IL-kódot tartalmazó szövegfájlt, és minden beágyazott felügyelt erőforráshoz egy .resources fájlt, amely az erőforrás nevével készült a metaadatokból. Ha egy nem felügyelt erőforrás beágyazva van a PEfilename fájlba, a .res fájl a /output beállítás il kimenetéhez megadott fájlnév használatával jön létre.
Feljegyzés
Ildasm.exe csak metaadat-leírásokat jelenít meg .obj és .lib bemeneti fájlokhoz. Ezeknek a fájltípusoknak az IL-kódja nincs szétszerelve.
A Ildasm.exe futtathatja an.exe vagy .dll fájlon keresztül annak megállapításához, hogy a fájl kezelhető-e. Ha a fájlt nem kezelik, az eszköz egy üzenetet jelenít meg, amely közli, hogy a fájlnak nincs érvényes közös nyelvi futtatókörnyezeti fejléce, és nem lehet szétszerelni. Ha a fájl kezelése megtörtént, az eszköz sikeresen fut.
Verzióadatok
A .NET-keretrendszer 4.5-től kezdve a Ildasm.exe a nyers bináris tartalom megjelenítésével kezel egy ismeretlen marshal BLOB-t (bináris nagy objektumot). A következő kód például bemutatja, hogyan jelenik meg egy C#-program által létrehozott marshal BLOB:
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
A .NET-keretrendszer 4.5-től kezdődően Ildasm.exe a felületi implementációkra alkalmazott attribútumokat jeleníti meg, ahogyan az Ildasm.exe kimenetének alábbi részlete is mutatja:
.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 )
…
Példák
Az alábbi parancs hatására a PE-fájl MyHello.exe
metaadatai és szétszerelt kódja megjelenik az Ildasm.exe alapértelmezett grafikus felhasználói felületen.
ildasm myHello.exe
Az alábbi parancs szétszereli a fájlt MyFile.exe
, és az eredményül kapott IL-összeállító szöveget tárolja a fájlban MyFile.il.
ildasm MyFile.exe /output:MyFile.il
Az alábbi parancs szétszereli a fájlt MyFile.exe
, és megjeleníti az eredményül kapott IL-összeszerelő szöveget a konzolablakban.
ildasm MyFile.exe /text
Ha a fájl MyApp.exe
beágyazott felügyelt és nem felügyelt erőforrásokat tartalmaz, a következő parancs négy fájlt hoz létre: MyApp.il, MyApp.res, Icons.resources és Message.resources:
ildasm MyApp.exe /output:MyApp.il
Az alábbi parancs szétszereli a metódust MyMethod
az osztályban MyClass
, MyFile.exe
és megjeleníti a kimenetet a konzolablakban.
ildasm /item:MyClass::MyMethod MyFile.exe /text
Az előző példában több különböző aláírással ellátott MyMethod
metódus is szerepelhet. Az alábbi parancs szétszereli a példánymetódust MyMethod
a void visszatérési típusával, valamint az int32 paramétertípussal és a sztringgel.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
Feljegyzés
Az .NET-keretrendszer 1.0-s és 1.1-s verzióiban a metódus nevét követő bal zárójelet az aláírás után egy jobb zárójelnek kell kiegyensúlyoznia: MyMethod(instance void(int32))
. A .NET-keretrendszer 2.0-tól kezdve a záró zárójelet meg kell hagyni: MyMethod(instance void(int32)
.
Egy metódus (Shared
metódus a Visual Basicben) lekéréséhez static
hagyja ki a kulcsszótinstance
. Azok az osztálytípusok, amelyek nem primitív típusok, és int32
string
tartalmazniuk kell a névteret, és a kulcsszónak class
kell megelőznie. A külső típusokat szögletes zárójelben kell megadni a kódtár nevének. Az alábbi parancs szétszerel egy statikus metódust MyMethod
, amely egy típusparaméterrel AppDomain rendelkezik, és amelynek visszatérési AppDomaintípusa .
ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text
A beágyazott típust meg kell előznie a benne található osztálynak, amelyet perjellel kell elválasztani. Ha például az MyNamespace.MyClass
osztály egy beágyazott osztályt tartalmaz, NestedClass
a beágyazott osztály a következőképpen lesz azonosítva: class MyNamespace.MyClass/NestedClass
.