Проекты Средства отладки
       
  Дизассемблер-трассировщик DASM51
     
     
   

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

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

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

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

При работе дизассемблера генерируется промежуточный файл протокола ~~~tmp.txt Пользователь имеет возможность просмотреть результаты работы и в случае необходимости переименовать его в файл с необходимым именем и расширением. Этот файл перезаписывается каждый раз при выборе одного из допустимых режимов дизассемблирования. Этот факт следует учитывать, если необходимо сохранять промежуточные результаты для дальнейшего анализа.

Программа генерирует файл протокола, очищенный от паразитной информации, позволяя пользователю сконцентрироваться на анализе критичных для понимания фрагментов программы. Программа Dasm.exe не требует инсталяции, корректно работает как под управлением ОС MS-DOS, так и в окне сеанса DOS в ОС Win_9x и NT4.0

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

  1. быстрое дизассемблирование (Quick disassemler)
  2. трассировка и дизассемблирование (Tracer disassemler)

       
      Quick disassemler
     
     

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

Пользователь имеет возможноть выбрать ряд опций, касающиеся процесса дизассемблирования, сгруппированные в окне Options, появляющееся после выбора Quick disassemler.

       
      Опции быстрого дизассемблирования
     
     
Address ...   набор опций, определяющих размещение дизассемблируемого модуля в адресном пространстве микропроцессора.
     
Chip location :   Адрес размещения дизассемблируемого модуля в адрессном пространстве микропроцессора. Для модуля, размещаемого внутри кристалла этот адрес равен 0000hex, при работе с модулями, размещаемыми во внешней памяти программ - адрес начала внешней памяти программ (в hex - виде)
     
Begin from :   Стартовый адрес процесса дизассемблирования. По умолчанию - 0000hex
     
Finish proc.   Конечный адрес дизассемблируемого модуля. По умолчанию - устанавливается на конечный адрес загруженного файла.
     
Log only   Результаты дизассемблирования выводятся только на экран монитора. Эта опция удобна для быстрого дизассемблирования небольших фрагментов программы, например, для начального анализа присутствия или отсутствия команд перехода по векторам прерываний микропроцессора.
     
Tmp-file only   Результаты дизассемблирования выводятся только во временный файл, генерируемый программой. Эта опция удобна для достаточно больших фрагментов программы.
     
fUll login   Результаты дизассемблирования выводятся и на экран монитора, и во временный файл
     
Include Hex-code   В результирующий протокол включаются шестнадцатиричные коды, интерпретируемые дизассемблером. Это удобно для предварительного дизассемблирования фрагментов, внутри которых с высокой степенью вероятности могут присутствовать блоки данных. Однако - результирующий файл протокола невозможно ассемблировать без дополнительного редактирования результирующего файла протокола дизассемблирования.
     
Without Hex-code   В результирующий протокол не включаются шестнадцатиричные коды, интерпретируемые дизассемблером. Результирующий файл протокола возможно ассемблировать без дополнительного редактирования файла протокола дизассемблирования.
     
labels type :   набор опций, определяющих тип меток, генерируемых в процессе дизассемблирования и помещаемых в файл протокола.
     
$-type   $-тип - тип меток, принятых в ряде ассемблеров, впереди метки ставится префикс $+ , за которым следует шестнадцатиричный адрес метки. В частности, широко распространенный ассемблер AD2500 интерпретирует такого вида метки как локальные. Это позволяет переименовывать осмысленные фрагменты программы, не обращая внимание на прочие внутренние метки.
     
labels   стандартный (ANSI) тип меток. Метка генерируется из префикса, задаваемого опцией labels prefix и шестнадцатиричного адреса метки. При выборе данного типа меток следует учитывать, что ряд ассемблеров обрабатывает метки ограниченной длины.
     
labels prefix   Префикс, задаваемый пользователем, используемый при генерации меток стандартного (ANSI) типа. По умолчанию префикс равен L, что приводит к генерации меток вида LXXXX:, где XXXX - шестнадцатиричный адрес метки.
При выборе пользователем префикса Lab, будут генерироваться метки вида LabXXXX:, где XXXX - шестнадцатиричный адрес метки.
       
      Tracer disassembler (трассирующий дизассемблер)
     
     

Режим трассировки программы гораздо более сложен, однако позволяет получить гораздо более осмысленный результат дизассемблирования.

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

Пользователь имеет возможноть выбрать ряд опций, касающиеся процесса дизассемблирования, сгруппированные в окне Options, появляющееся после выбора Tracer disassemler.

       
      Опции трассировки и дизассемблирования
     
     
Address ...   набор опций, определяющих размещение дизассемблируемого модуля в адресном пространстве микропроцессора.
     
Chip location :   Адрес размещения дизассемблируемого модуля в адрессном пространстве микропроцессора. Для модуля, размещаемого внутри кристалла этот адрес равен 0000hex, при работе с модулями, размещаемыми во внешней памяти программ - адрес начала внешней памяти программ (в hex - виде)
     
Begin from :   Стартовый адрес процесса дизассемблирования. По умолчанию - 0000hex
     
labels prefix   Префикс, задаваемый пользователем, используемый при генерации меток стандартного (ANSI) типа. По умолчанию префикс равен Lab, что приводит к генерации меток вида LabXXXX:, где XXXX - шестнадцатиричный адрес метки.
При выборе пользователем префикса L, будут генерироваться метки вида LXXXX:, где XXXX - шестнадцатиричный адрес метки.
     
Log only   Результаты дизассемблирования выводятся только на экран монитора. Эта опция удобна для быстрого дизассемблирования небольших фрагментов программы, например, для начального анализа присутствия или отсутствия команд перехода по векторам прерываний микропроцессора.
     
Tmp-file only   Результаты дизассемблирования выводятся только во временный файл, генерируемый программой. Эта опция удобна для достаточно больших фрагментов программы.
     
fUll login   Результаты дизассемблирования выводятся и на экран монитора, и во временный файл
     
Include Hex-code   В результирующий протокол включаются шестнадцатиричные коды, интерпретируемые дизассемблером. Это удобно для предварительного дизассемблирования фрагментов, внутри которых с высокой степенью вероятности могут присутствовать блоки данных. Однако - результирующий файл протокола невозможно ассемблировать без дополнительного редактирования результирующего файла протокола дизассемблирования.
     
Without Hex-code   В результирующий протокол не включаются шестнадцатиричные коды, интерпретируемые дизассемблером. Результирующий файл протокола возможно ассемблировать без дополнительного редактирования файла протокола дизассемблирования.
     
labels type :   набор опций, определяющих тип меток, генерируемых в процессе дизассемблирования и помещаемых в файл протокола.
     
$-type   $-тип - тип меток, принятых в ряде ассемблеров, впереди метки ставится префикс $+ , за которым следует шестнадцатиричный адрес метки. В частности, широко распространенный ассемблер AD2500 интерпретирует такого вида метки как локальные. Это позволяет переименовывать осмысленные фрагменты программы, не обращая внимание на прочие внутренние метки.
     
labels   стандартный (ANSI) тип меток. Метка генерируется из префикса, задаваемого опцией labels prefix и шестнадцатиричного адреса метки. При выборе данного типа меток следует учитывать, что ряд ассемблеров обрабатывает метки ограниченной длины.
     
Standard labels ...   Из-за того, что микропроцессор может иметь несколько источников прерываний, не имеющих никаких общих модулей с основным модулем, для корректной работы трассировщика необходимо указать все адреса, с которых может начинаться выполнение набора команд (векторы прерывания и т.п.) Только в этом случае трассировка и выделение всех блоков команд происходит корректно.
Однако, исключение "неинтересных" для исследования векторов позволяет выделить нужный для анализа набор блоков команд программы, игнорируя остальные.
     
Start (0000h)
  Включение \ выключение старторого адреса микропроцессора (0000H) для трассировки и дизассемблирования
Int 0 (0003h)
  Включение \ выключение адреса вектора прерывания Int 0 (0003h) для трассировки и дизассемблирования
Timer 0 (000Bh)
  Включение \ выключение адреса вектора прерывания Timer 0 (000Bh) для трассировки и дизассемблирования
Int 1 (0013h)
  Включение \ выключение адреса вектора прерывания Int 1 (0013h) для трассировки и дизассемблирования
Timer1 (001Bh)
  Включение \ выключение адреса вектора прерывания Timer1 (001Bh) для трассировки и дизассемблирования
Serial (0023h)
  Включение \ выключение адреса вектора прерывания Serial (0023h) последовательного порта для трассировки и дизассемблирования
Add label :
Add label :
Add label :
  Включение \ выключение 3-х дополнительно определенных адресов или векторов прерываний расширенных процессоров для трассировки и дизассемблирования
       
      Ограничения данной версии
     
     

Данная версия программы не поддерживает анализ состояния стека, что не позволяет анализировать нестандартные способы условного ветвления программы.

К примеру фрагмент программы, когда адрес перехода вычисляется, заносится в стек и выполняется переход по содержимому стека, приведенной ниже :

..............
push dph
push dpl
ret
;--------------------
label1:
..............

не будет корректно трассироваться.

       
  Версия программы с указанными ограничениями (dasm.zip) доступна в .zip формате
     
 
Контакты
   
Copyright © by iTT Ltd