Дизассемблер - Disassembler

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

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

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

Проблемы разборки

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

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

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

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

Дизассемблеры и эмуляторы

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

Дизассемблер

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

Смотрите также

Рекомендации

  1. ^ а б 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, с подробностями, исправлениями и обходными путями Blick auf undokumentierte. MPDOSTIP. Выпуск 157 (на немецком языке) (3-е изд.). В архиве из оригинала на 2017-09-10. Получено 2014-09-06. (NB. NWDOSTIP.TXT - это комплексная работа над Novell DOS 7 и OpenDOS 7.01, включая описание многих недокументированных функций и внутренних компонентов. Он является частью еще более обширной коллекции автора MPDOSTIP.ZIP, поддерживаемой до 2001 года и распространенной в то время на многих сайтах. Предоставленная ссылка указывает на старую версию файла NWDOSTIP.TXT, преобразованную в HTML.)
  4. ^ Sourcer - Комментирующий дизассемблер (Сентябрь 1989 г.). V Communications, Inc. 1988. Номер детали S0989-164.. Получено 2019-12-21.
  5. ^ ldisasm
  6. ^ Крошечный дизассемблер длины x86
  7. ^ Дизассемблер увеличенной длины для x86-64

дальнейшее чтение

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

внешняя ссылка