Декомпілятор hex-rays - швидкий старт

Давайте почнемо з дуже короткою і простий функції:

Ми декомпіліруем її шляхом виконання команди меню View, Open subviews, Pseudocode (рус. Вид, Відкрити уявлення, Псевдокод) (що викликає клавіша F5):

Так як потрібен згенерований код на Сі, то такий результат не симпатичний. У тексті має місце багато операцій приведення, що призводить його в безлад. Причиною тому є тимчасове невиконання декомпілятори відновлення типів. Очевидно, що параметр a1 вказує на структуру, але декомпілятор пропустив її. Давайте додамо трохи інформації про тип в базу даних і подивимося, що вийде. Для цього ми відкриємо вікно Structure 1 (рус. Структура) (Shift-F9) і додамо новий тип - структуру:

Після цього ми перемкнемося на вікно псевдокоду і вкажемо тип a1. Ми можемо зробити це, помістивши курсор на будь-який входження a1 і натиснувши Y.

Коли ми натиснемо на клавішу Enter. висновок декомпілятори стане набагато краще:

Але можливості для удосконалення все ще існують. Ми можемо перейменувати поля структури і визначити їх типи. Наприклад, field_6B1. здається, використовується як лічильник, а field_6B5 - очевидно, покажчик на функцію. Ми можемо зробити все це без перемикання між вікнами. Буде потрібно тільки вікно Structure 2 для початкового визначення структури. Ось як ми визначаємо тип поля для покажчика на функцію:

Кінцевий результат виглядає наступним чином:

Будь ласка, зверніть увагу, що в тексті більше немає ніяких операцій приведення, і він виглядає набагато краще ніж його початкова версія.

1. Поточна версія IDA вимагає перемикання до подання вихідного тексту на асемблері перед відкриттям вікна Structure (рус. Структура), інакше виникне порушення прав доступу.
2. Це не зовсім так. Фактично, ми можемо ввести повне визначення структури в діалогове вікно типу, але це проблематично, так як поле для введення однорядкове. Ми також можемо визначити нові типи за допомогою команди File, Load file, Parse C header file (рус. Файл, Завантажити файл, Розібрати заголовки Сі).

Схожі статті