16.09.2016

Дизайн Детранслятора – Вступ

Original: http://www.backerstreet.com/decompiler/introduction.htm

 

Вступ

Декомпілювання є формою зворотного інженерії комп’ютерних програм. Його мета полягає в тому, щоб перетворити скомпільований двійковий файл у вихідний файл. Можна хотіти зробити це з кількох причин, наприклад, щоб зрозуміти, як працює програма, або спробувати змінити програму, щоб підвищити його або виправити помилку.

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

Було зроблено кілька спроб проводити при записі двійкових виконуваних декомпілятори. На цій сторінці є декілька прикладів.

Є ще більше декомпілятори доступних для керованих середовищах, що використовують байт-код, як Java і C #. Великий список доступний на вікі перетворень програм.

На цих сторінках ми сфокусуємось на декомпілювання бінарних виконуваних файлів, або з машинного коду до вихідного коду, так як це набагато складніше, ніж декомпіляцію Java байт-код або C #.

Кілька мов і компіляторів може виробляти машинний код, в тому числі деякі Java, C # і Visual Basic компілятори. Тому декомпілятор повинен знати, яка мова був використаний для компіляції програми, і буде мати підтримку для створення цієї мови. Проте, більшість складних проблем в декомпілювання з’являються при використанні менш жорстких мов, а саме: C, Pascal або C ++.

Більшість алгоритмів може використовуватися для всіх мов, тому ми будемо в основному використовувати приклади, написані на C. Коли ми показуємо алгоритм, ми будемо використовувати C або C ++, так як вони є найбільш доступні мови на обох Linux і Windows.

Незалежно від мови перекладу, декомпілятор в основному має справу з 3-ма типами сутностей:

– Oб’єкти коду (функції, звітність)
Об’єкти даних (глобальні та локальні змінні)
Типи (типи змінних, прототипи функцій)

Постійна проблема декомпілятор, щоб спробувати вивести один або декілька з цих трьох осіб вище від послідовності байтів, знайдених в бінарному файлі. Для того, щоб зробити це, це корисно знати, як засоби розробки (які ми називаємо «вперед engineering’tools) використовуються при написанні програми, так як це процес, який ми намагаємося повернутися.

About The Author

admin

Comments are closed.