Megosztás a következőn keresztül:


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 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á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özspecifier: .

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 (Sharedmetó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 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.

Lásd még