Decompiler

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. február 19-én felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .

A decompiler  egy olyan program, amely egy végrehajtható modult (amelyet a fordító kimenetén kap ) egyenértékű forráskódra fordít le magas szintű programozási nyelven.

 A dekompiláció a forráskód újbóli létrehozásának folyamata egy visszafejtő segítségével .

A dekompilációt különösen a programok visszafejtésében használják.

A dekompiláció sikere a visszafejtett kódban megjelenő információ mennyiségétől függ. A legtöbb virtuális gép által használt bájtkód (mint például a Java Virtual Machine vagy a .NET-keretrendszer Common Language Runtime ) gyakran tartalmaz kiterjedt metaadatokat, amelyek meglehetősen megvalósíthatóvá teszik a visszafejtést, míg a natív kód egyszerűbb és nehezebben visszafordítható. Különösen az alprogramok vagy a hívások közvetett címzésével járó függvények hívásai (a magas szintű programozási nyelvek tekintetében a függvényekre/eljárásokra mutató mutatókon keresztül történő hívások) tűnnek nehezen olvashatónak.

Ha tudjuk, hogy a visszafejtett program milyen nyelven íródott, akkor mindenekelőtt az ebből a nyelvből származó fordító futásidejű könyvtárait (RTL - runtime library) szétszedjük és elemezzük , mivel a program fordítása alapvetően hívásokra redukálódik. ezekből a könyvtárakból származó eljárások különféle paraméterei. Ezenkívül sok fordító lehetővé teszi, hogy megnézze, milyen összeállítási kódba alakulnak át a programutasítások a fordítás után. Ezek a konstrukciók a visszafejtő sablonjaivá válnak, így a visszafejtési folyamat bizonyos értelemben hasonló az ilyen sablonok véges halmazának gépi kódban történő felismeréséhez. Az eljáráshívásokat és a tőlük érkező visszaküldéseket a legkönnyebben felismerni. Határként szolgálnak az eljárási nyilatkozatok visszaállításához.

Egyes fordítók és utófordítási eszközök elhomályosítják a kódot , hogy megnehezítsék a visszafejtést.

A dekompilátorokat úgy tekinthetjük, mint amelyek több fázisból állnak, amelyek mindegyike hozzájárul a teljes dekompilációs folyamat bizonyos aspektusaihoz.

Decompiler példák

Lásd még