Minden .NET felett alkalmazható programozási nyelv, amely képes szerelvények gyártására, egy köztes nyelvre fordul. Ezt szokás Intermediate Language-nek vagy, IL-nek, MSIL-nek vagy CIL-nek nevezni. Ez egy gépi, bináris kód. A köztes elnevezés arra utal, hogy ez a bináris kód közvetlenül nem hajtható végre a számÃtógép processzora által. Ennek a kódnak a végrehajtásáért felel a CLR.
Mivel az IL kód közvetlenül nem futtatható, ezért tévesen szokták a CLR-t "virtuális gépnek" nevezni. Azonban a CLR nem végez virtualizációt a szó mai jelentésében. Az IL kódból közvetlenül futás elÅ‘tt és futási idÅ‘ben készÃt a számÃtógép processzora által futtatható bináris utasÃtásokat. Ezt a technológiát Just In Time fordÃtásnak (JIT-nek) vagy dinamikus újrafordÃtásnak (Dynamic recompilation) nevezzük.
A köztes nyelv utasÃtásai jóval komplexebbek, mint bármelyik processzor utasÃtáskészlete. EbbÅ‘l adódóan ez a kód könnyen visszafejthetÅ‘ egy magasabb szintű nyelv (például C#, VB.NET) utasÃtásaira. Ebben további nagy segÃtség, hogy C# fordÃtóból nincs annyi, mint mondjuk C/C++ fordÃtóból és az IL kód generálásakor eleve kevesebb optimalizációt kell végrehajtania a fordÃtónak, mintha natÃv programot fordÃtana.
Az IL kód megvizsgálásához a Visual Studio is kÃnál eszközt. Ennek a neve IL DASM (IL Disassembler). A program a Windows SDK részeként települ, parancsikon nem készül hozzá a Start menüben. A program a c:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ mappában található.1
A programot elindÃtva .NET szerelvényeket tudunk megnyitni. Egy szerelvény megnyitása után a fÅ‘ ablakban a szerelvény által tartalmazott osztályokat, illetve az az azon belül definiált metódusokat láthatjuk.
Egy metódusra kattintva külön ablakban megkapjuk a hozzá tartozó IL kódot.
Némi gyakorlással már ebbÅ‘l is össze tudnánk rakni a program forráskódját, mert ahogy látható, az IL kód is elég beszédes. Azonban felesleges lenne Ãgy visszafejtenünk kódot, mert erre van egy sokkal okosabb eszköz, az ILSpy.
Az ILSpy egy .NET szerelvény visszafordÃtó, ami a .dll vagy .exe alapján képes legenerálni a létrehozásához szükséges projekt fájlt és C# kódot.
A program a https://github.com/icsharpcode/ILSpy vagy a https://marketplace.visualstudio.com/items?itemName=SharpDevelopTeam.ILSpy cÃmrÅ‘l tölthetÅ‘ le.
Utóbbi egy Visual Studio beépülő modul, ami ugyan úgy alkalmazható önálló programként is, viszont az a hasznos tulajdonsága, hogy a programunk által használt referenciákat könnyen megnyithatjuk vele a Visual Studio-ból.
Az ILSpy programot elindÃtva szintén binárisokat tudunk betölteni. Hasznos képessége a programnak, hogy a szerelvény betöltése után az általa importált szerelvényekre is át tudunk menni, illetve azok kódját is meg tudjuk nézni. Az ILSpy a Tools menübÅ‘l is bármikor elindÃtható.
-
Az útvonal az operációs rendszertÅ‘l, SDK és egyéb komponensek verziójától függÅ‘en eltérhet.↩