Să începem cu o funcție foarte scurtă și simplă:
Am decompila prin executarea comenzii meniului, subviews deschise, pseudocod (Hotkey F5) (eng View, Open View, pseudo-cod.):
Deoarece avem nevoie de codul generat în C, acest rezultat nu este destul. În text, există multe operațiuni de reducere, ceea ce duce la confuzie. Motivul pentru aceasta este eșecul temporar al decompilatorului de a restabili tipurile. Evident, parametrul a1 indică o structură, dar decompilatorul o ratează. Să adăugăm câteva informații despre acest tip de date în baza de date și să vedem ce se întâmplă. Pentru a face acest lucru, deschidem fereastra Structură 1 (structura rusă) (Shift-F9) și adăugăm o nouă structură de tip:
După aceasta, trecem la fereastra pseudo-cod și specificăm tipul a1. Putem face acest lucru prin plasarea cursorului la orice apariție a lui a1 și apăsarea lui Y.
Când apăsăm pe Enter. producția decompilatorului va fi mult mai bună:
Dar există încă oportunități de îmbunătățire. Putem redenumi câmpurile de structură și definim tipurile acestora. De exemplu, field_6B1. pare să fie folosit ca un contor, iar field_6B5 este evident un indicator al unei funcții. Putem face toate acestea fără a trece prin ferestre. Numai fereastra Structură 2 este necesară pentru definiția inițială a structurii. Iată cum definim tipul de câmp pentru un indicator pentru o funcție:
Rezultatul final este următorul:
Rețineți că textul nu mai are operațiuni distribuite și arată mult mai bine decât versiunea inițială.
1. Versiunea actuală a IDA să fie comutat la codul de vizualizare sursă în limbaj de asamblare înainte de a deschide fereastra Structura (Rus. Structura), în caz contrar există o violare de acces.
2. Nu este destul de adevărat. De fapt, putem introduce o definiție completă a structurii în caseta de dialog de tip, dar acest lucru este problematic, deoarece un câmp de intrare cu o singură linie. Putem defini, de asemenea, noi tipuri de fișiere folosind comenzi, fișiere de încărcare, fișierul antet Parse C (Rus. Încărcare fișier fișier antet fișier C Analizează).