Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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 filenamekimeneti 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ánosPRI — PrivátFAM — CsaládASM – SzerelvényFAA — Család és közgyűlésFOA — Család vagy közgyűlésPSC – Privát hatókörA 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. |
/cikk: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 memberclass.- Szétszereli member a class megadott aláírástsig. A formátum a sig következő:[ instance] returnType(parameterType1, parameterType2, ..., parameterTypeN). |
| /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.SCHEMA — 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.VALIDATE – Ellenőrizze a metaadatok konzisztenciáját.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 ildasm a parancssorba a PEfilename argumentum vagy bármely beállítás megadása nélkül.
File A menüben navigálhat a Ildasm.exebetö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 ki a Dump parancsot a File menüből. Ha csak a hierarchikus fanézetet szeretné menteni, válassza a Treeview memóriakép parancsot a File menüből. 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ány metódusát MyMethod a visszatérési void típussal és a paramétertípusokkal int32 és stringa .
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 (staticmetódus a Visual Basicben) lekéréséhez Shared hagyja ki a kulcsszótinstance. Azok az osztálytípusok, amelyek nem primitív típusok, és int32string tartalmazniuk kell a névteret, és a kulcsszónak classkell 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, NestedClassa beágyazott osztály a következőképpen lesz azonosítva: class MyNamespace.MyClass/NestedClass.