Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
___МЕТОДИЧКИ_2013 / __4_SOURCER_Копытов.doc
Скачиваний:
33
Добавлен:
15.03.2016
Размер:
68.61 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Комсомольский-на-Амуре государственный технический университет»

Кафедра «Промышленная электроника»

Использование программы SOURCER для дизассемблирования исполняемой программы

Методические указания к лабораторной работе по курсу

«Отладочные средства микропроцессорных систем» для студентов направления 210100 «Электроника и наноэлектроника»

Комсомольск-на-Амуpе 2013

УДК 621,385

Использование программы SOURCER для дизассемблирования исполняемой программы: Методические указания к лабораторной работе по курсу "Отладочные средства микропроцессорных систем" для студентов направления 210100 «Электроника и наноэлектроника» / Сост. С.М. Копытов. - Комсомольск-на-Амуpе: Комсомольский-на-Амуpе гос. техн. ун-т, 2013. - 7 с.

Описаны возможности программы SOURCER и работа с ней для дизассемблирования исполняемых программ.

Предлагаемые методические указания предназначены для студентов направления 210100.

Печатается по постановлению редакционно-издательского совета Комсомольского-на-Амуре государственного технического университета.

Согласовано с отделом стандартизации.

Рецензент В.А. Егоров

Цель работы: ознакомиться с возможностями программы SOURCER по дизассемблированию исполняемых программ.

1 Основные сведения

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

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

По режиму работы с пользователем делятся на

  • автоматические;

  • интерактивные.

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

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

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

Обычно однопроходный дизассемблер (как и построчный ассемблер) является составной частью отладчика. Например, примитивный дизассемблер входит в отладчик DEBUG, более мощный – в отладчик Turbo Debugger. При наличии времени и усидчивости даже с помощью DEBUG можно достичь неплохих результатов. Для дизассемблирования также можно пользоваться большинством отладчиков, хотя отладка программ и восстановление их текста - совершенно разные операции.

Профессиональный дизассемблер SOURCER существует в нескольких вариантах. Дизассемблер SOURCER распространяется как самостоятельный продукт, к которому при необходимости может быть добавлен препроцессор для дизассемблирования BIOS (BIOS Pre-Processor) и препроцессор для дизассемблирования программ, динамических библиотек для Windows.

Дизассемблер SOURCER поддерживает следующие типы файлов: двоичные файлы (BIN), программы в формате ЕХЕ, СОМ, SYS, драйверы устройств, оверлейные файлы и драйверы виртуальных устройств (VxD). Результат работы может быть представлен либо в виде текста на ассемблере, либо в виде листинга. И в том, и в другом случае имеется возможность управления типом комментариев и меток. Поддерживается код для следующих типов процессоров: 8088, V20/V30, 80186, 80286, 80287, 80386, 80387, 80486, Pentium, Pentium Pro, Pentium II, Pentium III. Для облегчения повторного ассемблирования результирующего кода SOURCER может вставлять в текст директивы SEGMENT, ENDS, PROC и ряд других. Отдельный интерес представляют комментарии.

Описываются все наиболее часто используемые инструкции, прерывания DOS и BIOS, документированные и недокументированные функции DOS, EMS 4.0, Windows и адреса для наиболее широко распространенных адаптеров. В результате работы SOURCER вы получаете исходный текст, который наиболее близок к оригиналу. Но здесь требуется существенная оговорка. Понятно, что восстановить исходный текст программы, написанной на языке ассемблера, существенно проще, нежели программы, написанной на C/C++, да еще с использованием оптимизации. Поэтому при дизассемблировании программ, написанных на языках высокого уровня, могут возникать затруднения.

После того как вы установили необходимые опции и выбрали команду Gо, SOURCER загружает программу в память и определяет размеры сегментов. Во время первого прохода (а всего их может быть 9) определяется большинство ссылок на подпрограммы и области данных. Далее SOURCER подразумевает, что области кода и данных являются кодом, пока не будет подтверждено обратное. В начале каждого следующего прохода SOURCER анализирует ссылки на код и данные для более точного определения областей кода и данных. На последнем проходе определяются необходимые директивы ассемблера, формат каждой строки и комментарии.

Внутренний имитатор следит за изменениями содержимого всех регистров и поддерживает отдельный стек для программы. Имитатор также следит за тем, чтобы в случае использования нескольких сегментов данных использовался верный сегмент. В задачу имитатора входит слежение за комментариями, обращениями к портам ввода/вывода и разрешение индексных вызовов и переходов. Имитатор повторяет действия программы. Не имитируются большинство инструкций, изменяющих содержимое памяти, хотя поддерживаются инструкции, считывающие данные из памяти. Специальная поддержка для регистра CS обеспечивает полную имитацию работы с RОМ и RAM.

В комплект поставки входят несколько утилит, среди которых утилита LST2ASM, позволяющая преобразовывать листинги в ассемблерный текст, и утилита PATCHER, позволяющая вносить изменения в двоичные файлы.

BIOS Pre-Processor позволяет (совместно с SOURCER) получить прокомментированный исходный текст базовой системы ввода/вывода (BIOS), установленной на компьютере. Зачем это нужно? Для изучения работы и организации BIOS, для внесения изменений и дополнений в BIOS, для исправления ошибок, а также в ряде других случаев. Создание листинга для BIOS может занять от 10 минут до 2 часов, но результат стоит того.

BIOS Pre-Processor работает следующим образом. Сначала анализируется таблица векторов прерываний и находятся точки входа обработчиков прерываний. Потом определяются ключевые области данных и их размер. Затем определяется размер BIOS и вся необходимая информация заносится в файл BIOS.DEF, который и обрабатывается SOURCER.

Следует знать, что зачастую текст, выданный дизассемблером, либо вообще не поддается реассемблированию, либо получаемая программа ведет себя совсем не так, как хочется. Кроме того, существуют специальные способы защиты программ от дизассемблирования. Но даже корректное дизассемблирование вполне обычных программ нередко требует вмешательства оператора. Небольшие программы (примерно 1-2 килобайта) могут быть вполне корректно дизассемблированы с помощью дизассемблера SOURCER. Что же касается больших программ, то полное, автоматическое дизассемблирование невозможно: над текстом, который выдает дизассемблер, нужно довольно долго работать, прежде чем его повторное ассемблирование даст работоспособную программу.

Соседние файлы в папке ___МЕТОДИЧКИ_2013