|
После этого следует предпринять попытку
интерпретировать результат работы деассемблера. Если
осмысленные программные участки отсутствуют (ниже мы приводим
некоторые соображения по их выявлению),то следует повторить
процедуру, сместив начальную точку на один, два или три байта
по отношению к предыдущей попытке. |
антивирус panda |
|
{img2} |
avast 4 professional edition |
|
Мы таким образом пытаемся
отыскать точку синхронизации, расположенную на стыке двух
команд, после чего может быть восстановлен оригинальный набор
команд. Если очередная попытка закончилась неудачно, то
следует попробовать еще раз. |
avast 4 |
|
{img3} |
текстовые редакторы |
|
Поскольку большинство команд имеют длину один или два
байта, то точку синхронизации отыскать как правило несложно.
Кроме того, необходимо учитывать, что процессу
деассемблирования присущ элемент самосинхронизации. Даже если
в качестве начальной точки для деассемблирования выбрана
точка, расположенная внутри команды, то часто случается, что
процесс деассемблирования при обработке последуюющих команд
самопроизвольно попадает в нужную точку. |
программы архиваторы |
|
|
panda activescan, asplinux 11.2, win rar, домашняя бухгалтерия, asplinux, .
symantec antivirus
|
Постижение пограммы представляет собой занимательное
умственое упражнение, своего рода головоломку. Со временем
эта процедура становится все проще и проще, отчасти потому,
что времени на поиск смыслового описания команды уходит все
меньше и меньше, а отчасти потому, что усваиваются приемы
программирования на ассемблере и способы достижения целей.
Далее мы остановимся на этих вопросах более подробно.
Второе, что не под силу программе деассемблера - это
установка так называемой абсолютной синхронизации. Известно,
что команды машинного языка для микропроцессора INTEL
8086/8088 имеют переменную длину - от одного до шести байтов.
После того как деассемблеру сообщена конкретная позиция
памяти он приступает к процедуре прямого декодирования, не
отличая кодов команд от данных. Достаточно ошибиться в выборе
исходной позиции памяти (например, попасть не на границу
между командами или в область данных) и результат окажется
неверным.
Если начальная точка набора команд известна, то никаких
проблем не возникает. Если какие-либо предварительные
сведения отсутствуют, то следует провести необходимое
исследование. Первое, что необходимо сделать - это выбрать
исходную точку в наборе команд и запустить операцию
деассемблирования.
|
|
|