Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Исходный код на языке ассемблера обычно допускает использование констант и комментариев программиста . Обычно они удаляются ассемблером из собранного машинного кода . Если так, то дизассемблер, работающий с машинным кодом, произведет дизассемблирование без этих констант и комментариев; Дизассемблированный вывод становится труднее интерпретировать человеку, чем исходный аннотированный исходный код. Некоторые дизассемблеры предоставляют встроенную функцию комментирования кода, при которой сгенерированный вывод обогащается комментариями, касающимися вызываемых функций API или параметров вызываемых функций. Некоторые дизассемблеры используют символьную отладочную информацию, представленную в объектных файлах, таких как ELF.. Например, IDA позволяет человеку-пользователю составлять мнемонические символы для значений или областей кода в интерактивном сеансе: человеческое понимание, применяемое к процессу разборки, часто соответствует человеческому творчеству в процессе написания кода.

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

Проблемы разборки [ править ]

Возможно написание дизассемблера, который производит код, который после сборки дает в точности исходный двоичный файл; однако часто есть отличия. Это предъявляет требования к выразительности ассемблера. Например, ассемблер x86 делает произвольный выбор между двумя двоичными кодами для чего-то столь же простого, какMOV AX,BX. Если исходный код использует другой вариант, исходный код просто не может быть воспроизведен в любой момент времени. Однако даже при полностью правильной разборке проблемы остаются, если программа требует модификации. Например, та же самая команда перехода на машинном языке может быть сгенерирована ассемблерным кодом для перехода в указанное место (например, для выполнения определенного кода) или для перехода на указанное количество байтов (например, чтобы пропустить нежелательную ветвь). . Дизассемблер не может знать, что предназначено, и может использовать любой синтаксис для создания дизассемблера, воспроизводящего исходный двоичный файл. Однако, если программист хочет добавить инструкции между инструкцией перехода и ее местом назначения, необходимо понимать операцию программы, чтобы определить, должен ли переход быть абсолютным или относительным, т. Е.должен ли его пункт назначения оставаться в фиксированном месте или перемещаться так, чтобы пропустить как исходные, так и добавленные инструкции.

Примеры дизассемблеров [ править ]

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

Любой интерактивный отладчик будет включать некоторый способ просмотра дизассемблированной отлаживаемой программы. Часто один и тот же инструмент дизассемблирования будет упакован как автономный дизассемблер, распространяемый вместе с отладчиком. Например, objdump , часть GNU Binutils , связана с интерактивным отладчиком gdb . [1]

  • Бинарный ниндзя [2]
  • ОТЛАДКА [3]
  • Интерактивный дизассемблер (IDA)
  • Гидра
  • Hiew
  • Дизассемблер бункера [1]
  • Netwide Disassembler (Ndisasm), спутник Netwide Assembler (NASM).
  • OLIVER ( интерактивное тестирование / отладка CICS ) включает дизассемблеры для Assembler, COBOL и PL / 1.
  • OllyDbg - это 32-битный отладчик, анализирующий на уровне ассемблера.
  • Radare2
  • SIMON (пакетное интерактивное тестирование / отладка) включает дизассемблеры для Assembler, COBOL и PL / 1.
  • Sourcer , комментирующий 16-битный / 32-битный дизассемблер для DOS , OS / 2 и Windows от V Communications в 1990-х годах [4]

Дизассемблеры и эмуляторы [ править ]

Динамический дизассемблер может быть включен в выходные данные эмулятора или гипервизора, чтобы построчно «отслеживать» выполнение любых выполняемых машинных инструкций в реальном времени. В этом случае, а также строки, содержащие дизассемблированный машинный код, регистр (ы) и / или изменение (я) данных (или любые другие изменения « состояния », такие как коды условий), которые вызывает каждая отдельная инструкция, могут быть показаны рядом или под разобранной инструкцией. Это обеспечивает чрезвычайно мощную отладочную информацию для окончательного решения проблемы, хотя размер результирующего вывода иногда может быть довольно большим, особенно если он активен для выполнения всей программы. OLIVER предоставил эти функции с начала 1970-х годов как часть своего CICS.отладочный продукт, который теперь включен в продукт XPEDITER от Compuware .

Дизассемблер длины [ править ]

Длина ассемблер , также известный как длина дизассемблер двигателя ( LDE ), является инструментом , который, с учетом последовательности байтов (инструкции), выводит число байтов , принимаемых анализируемой инструкции. Известные проекты с открытым исходным кодом для архитектуры x86 включают ldisasm, [5] Tiny x86 Length Disassembler [6] и Extended Length Disassembler Engine для x86-64. [7]

См. Также [ править ]

  • График потока управления
  • Анализ потока данных
  • Декомпилятор

Ссылки [ править ]

  1. ^ a b https://www.hopperapp.com
  2. ^ https://binary.ninja
  3. ^ Пол, Матиас Р. (1997-07-30). «Kapitel II.5. Allgemeines: Undokumentierte Möglichkeiten von DEBUG» [Недокументированные особенности DEBUG]. NWDOS-TIPs - Советы и приемы для Novell DOS 7, с подробным описанием, ошибками и обходными путями . MPDOSTIP . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано 10 сентября 2017 года . Проверено 6 сентября 2014 .(NB. NWDOSTIP.TXT - это комплексная работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной коллекции автора MPDOSTIP.ZIP, поддерживаемой до 2001 г. и распространяемой на многих сайтах по адресу время. Приведенная ссылка указывает на старую версию файла NWDOSTIP.TXT, преобразованную в HTML.)
  4. ^ Sourcer - Комментируя Disassembler (сентябрь 1989 ред.). V Communications, Inc. 1988. Номер детали S0989-164 . Проверено 21 декабря 2019 .
  5. ^ ldisasm
  6. ^ Крошечный дизассемблер длины x86
  7. ^ Дизассемблер увеличенной длины для x86-64

Дальнейшее чтение [ править ]

  • Винчигерра, Лори; М. Уиллс, Линда; Кеджривал, Нидхи; Мартино, Пол; Винчигерра, Ральф Л. (2003). «Экспериментальная среда для оценки инструментов разборки и перекомпиляции для C ++ и Java]». Труды 10-й рабочей конференции по обратному инжинирингу (WCRE) : 14–23. DOI : 10,1109 / WCRE.2003.1287233 . ISBN 0-7695-2027-8. S2CID  10398240 .
  • Шварц, Бенджамин; Дебрей, Саумья; Эндрюс, Грегори (2002). «Возвращение к дизассемблированию исполняемого кода». Труды 9-й рабочей конференции по обратному инжинирингу (WCRE) . Департамент компьютерных наук Университета Аризоны : 45–54. CiteSeerX  10.1.1.85.6387 .

Внешние ссылки [ править ]

  • Список дизассемблеров x86 в Викиучебнике
  • Transformation Wiki при разборке
  • Boomerang Общий декомпилятор программ машинного кода с открытым исходным кодом и перенацеливанием.
  • Дизассемблеры в Curlie
  • Online Disassembler , бесплатный онлайн-дизассемблер кода arm, mips, ppc и x86