Дизассемблер: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 19: Строка 19:
* [[Objdump]]
* [[Objdump]]
* [[Radare2]]
* [[Radare2]]
* Rizin<ref>{{Cite web|url=https://rizin.re/|title=Rizin|lang=en|last=Rizin|website=Rizin|access-date=2023-12-10}}</ref> и Cutter<ref>{{Cite web|url=https://cutter.re//|title=Cutter|lang=en|website=Cutter|access-date=2023-12-10}}</ref> (графический интерфейс для Rizin)
* {{нп5|Ghidra}}
* {{нп5|Ghidra}}



Версия от 19:49, 10 декабря 2023

Дизассе́мблер (от англ. disassembler [ˌdɪsəˈsɛmblə(r)]) — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.

По режиму работы с пользователем делятся на автоматические и интерактивные. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе. Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ.

Дизассемблеры бывают однопроходные и многопроходные. Основная трудность при работе дизассемблера — отличить данные от машинного кода, поэтому на первых проходах автоматически или интерактивно собирается информация о границах процедур и функций, а на последнем проходе формируется итоговый листинг. Интерактивность позволяет улучшить этот процесс, так как просматривая дамп дизассемблируемой области памяти, программист может сразу выделить строковые константы, дать содержательные имена известным точкам входа, прокомментировать разобранные им фрагменты программы. Обычно однопроходный дизассемблер (как и построчный ассемблер) является составной частью отладчика.

Чаще всего дизассемблер используют для анализа программы (или её части), исходный текст которой неизвестен — с целью модификации, копирования или взлома. Реже — для поиска ошибок (багов) в программах и компиляторах, а также для анализа и оптимизации создаваемого компилятором машинного кода.

При работе с исполняемым кодом или байт-кодом, созданным на некоторых языках высокого уровня (например, java) имеется возможность восстановить не только текст на языке ассемблера, но даже и структуру классов программы, а если при компиляции исполняемого файла не была отключена отладочная информация — то и исходный текст программы. Для исключения таких возможностей используется обфускация.

Примеры программ-дизассемблеров

См. также

Примечания

  1. Rizin Rizin (англ.). Rizin. Дата обращения: 10 декабря 2023.
  2. Cutter (англ.). Cutter. Дата обращения: 10 декабря 2023.

Литература

  • Владислав Пирогов. Ассемблер для Windows. — СПб.: БХВ-Петербург, 2007. — 896 с. — ISBN 978-5-9775-0084-5.
  • Владислав Пирогов. Ассемблер и дизассемблирование. — СПб.: БХВ-Петербург, 2006. — 464 с. — ISBN 5-94157-677-3.
  • Крис Касперски, Ева Рокко. Искусство дизассемблирования. — СПб.: БХВ-Петербург, 2008. — 896 с. — ISBN 978-5-9775-0082-1.

Ссылки