Decompilator

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 19 februarie 2022; verificarea necesită 1 editare .

Un decompilator  este un program care traduce un modul executabil (obținut la ieșirea unui compilator ) într-un cod sursă echivalent într -un limbaj de programare de nivel înalt .

Decompilarea  este procesul de recreare a codului sursă de către un decompilator.

Decompilarea, în special, este utilizată în ingineria inversă a programelor.

Succesul decompilării depinde de cantitatea de informații prezentate în codul decompilat. Codul de octeți utilizat de majoritatea mașinilor virtuale (cum ar fi Java Virtual Machine sau .NET Framework Common Language Runtime ) conține adesea metadate extinse care fac decompilarea destul de fezabilă, în timp ce codul nativ este mai slab și mai dificil de decompilat. În special, apelurile către subrutine sau funcții cu adresare indirectă a apelurilor (în ceea ce privește limbaje de programare de nivel înalt, apeluri prin pointeri către funcții/proceduri) par a fi greu de citit.

Dacă se știe în ce limbă a fost scris programul decompilat, atunci în primul rând , bibliotecile de execuție (RTL - biblioteca de execuție) ale compilatorului din acest limbaj sunt dezasamblate și analizate , deoarece în principiu compilarea programului se reduce la apeluri cu diverși parametri ai procedurilor din aceste biblioteci. În plus, multe compilatoare vă permit să vedeți în ce cod de asamblare se transformă instrucțiunile programului după compilare. Aceste constructe devin șabloane pentru decompilator, astfel încât procesul de decompilare este într-un sens similar cu recunoașterea unui set finit de astfel de șabloane în codul mașinii. Apelurile de procedură și returnările de la acestea sunt cel mai ușor de recunoscut. Ele servesc drept limite pentru restabilirea enunțurilor de procedură.

Unele compilatoare și instrumente post-compilare ofusca codul pentru a-l îngreuna decompilarea.

Decompilatoarele pot fi considerate ca fiind formate dintr-un număr de faze, fiecare dintre acestea contribuind la anumite aspecte ale procesului general de decompilare.

Exemple de decompilare

Vezi și