Decompiler on ohjelma, joka kääntää suoritettavan moduulin (saatu kääntäjän lähdöstä ) vastaavaksi lähdekoodiksi korkean tason ohjelmointikielellä .
Käännöksen purku on prosessi, jossa lähdekoodi luodaan uudelleen kääntäjällä.
Erityisesti purkamista käytetään ohjelmien käänteisessä suunnittelussa .
Purkamisen onnistuminen riippuu puretussa koodissa esitetyn tiedon määrästä. Useimpien virtuaalikoneiden (kuten Java Virtual Machine tai .NET Framework Common Language Runtime ) käyttämä tavukoodi sisältää usein laajaa metatietoa, joka tekee purkamisesta melko mahdollista, kun taas alkuperäinen koodi on kevyempää ja vaikeampaa purkaa. Erityisesti kutsut alirutiineihin tai funktioihin, joissa on epäsuora puhelujen osoitus (korkean tason ohjelmointikielissä kutsut toimintoihin/proseduureihin osoittavien osoittimien kautta) näyttävät olevan vaikea lukea.
Jos tiedetään millä kielellä purettu ohjelma on kirjoitettu, niin ensin puretaan ja analysoidaan tämän kielen kääntäjän ajonaikaiset kirjastot (RTL - runtime library) , koska periaatteessa ohjelman käännös rajoittuu kutsuihin näiden kirjastojen menettelyjen eri parametrit. Lisäksi monien kääntäjien avulla voit nähdä, millaiseksi kokoonpanokoodiksi ohjelmalauseet muuttuvat kääntämisen jälkeen. Näistä rakenteista tulee malleja kääntäjälle, joten purkuprosessi on tavallaan samanlainen kuin tällaisten mallien äärellisen joukon tunnistaminen konekoodissa. Toimenpidekutsut ja niistä tulleet palautukset ovat helpoimmin tunnistettavissa. Ne toimivat rajana menettelyn lausekkeiden palauttamiselle.
Jotkut kääntäjät ja kääntämisen jälkeiset työkalut hämärtävät koodia , mikä vaikeuttaa kääntämistä.
Kääntäjän voidaan ajatella koostuvan useista vaiheista, joista jokainen myötävaikuttaa tiettyihin yleisen purkuprosessin näkökohtiin.