В. Артамонов

Однопроходной дизассемблер для "Корвета"

Системную программу, восстанавливающую исходный текст на языке ассемблера по загрузочному модулю, принято называть дизассемблером, а процесс восстановления - дизассемблированием. Такая программа часто бывает незаменима при проведении на компьютере различных системных работ, например при изучении или модификации программного обеспечения, исходные тексты которого отсутствуют. К сожалению, среди программ, поставляемых для КУВТ "Корвет", дизассемблер отсутствует. Пришлось восполнять этот недостаток самостоятельно.

Разработанный дизассемблер представляет собой простую однопроходную программу [1] на Бейсике, работающую по дампу памяти. Работа программы начинается с задания диапазона анализируемых адресов (значение адреса не должно превышать 65535) и интервалов пропускаемых адресов. Последнее требует некоторых пояснений. Дело в том, что наиболее сложной задачей в дизассемблировании считается задача разделения данных и команд. В данном случае для решения этой задачи избран наиболее простой путь: с помощью программы DUMP, также разработанной по причине отсутствия аналога в поставляемом программном обеспечении, перед дизассемблированием делается дамп нужного участка памяти и определяются адреса, по которым содержатся данные. Найденные адреса (в виде интервалов пропускаемых адресов) задаются в начале работы дизассемблера. Если в процессе дизассемблирования текущий адрес попадает в один из интервалов пропускаемых адресов, а таких интервалов может быть задано до 100, то содержимое ячейки памяти по этому адресу интерпретируется только как данное; иначе - как данное и как команда.

Литература

  1. Безруков Н.Н. Эвристические методы повышения качества дизассемблирования // Программирование. 1988. № 4.