Итак, являются ли все данные, которым предшествует
команда безусловного перехода собственно осмысленными
командами? Предварительный ответ на этот вопрос может быть
положительным, поскольку для завершения выполнения
подпрограммы используется команда возврата (RET). Пока все
идет хорошо.
Можно ли приписать какие-то осмысленные действия первым
пяти командам деассемблированной программы? Эти команды
выглядят несколько странно, поскольку начинаются с команды
безусловного перехода (JMP). Большинство программ, однако,
первым делом выполняют ряд действий настроечного плана,
обращаясь для этого посредством команд вызова подпрограмм или
переходов, к нужным процедурам.
Таким образом, безусловный
переход в начале программы - каким бы причудливым он не
казался - не такая уж бессмыслица. Следующие четыре команды -
две пары обращения к подпрограммам с последующими командами
возврата в процедуру не особенно понятны, но, по крайней
мере, не противоречат друг другу и могут в какой-то степени
служить признаком наличия последовательности команд.
asplinux, avast 4 professional edition, avast 4 professional edition, офисные программы, прокси сервера, .
asplinux deluxe
Как правило, достаточно
бывает просто здравого смысла. Усвоив все наши рекомендации и
приобретя некоторые практические навыки, Вы, при
необходимости, сможете все это проделать. В следующем
параграфе мы выполним декодирование (реконструкцию) программы
Бэйсик-ПЗУ; читатель, таким образом, получит представление о
том, как это делается и убедится в том, что это не очень
сложно.
6.4. Анализ содержимого ПЗУ - реконструкция
интерпретатора
В качестве примера попробуем деассемблировать фрагмент
Бэйсик-ПЗУ. Начнем с исходного параграфа, т.е. параграфа с
адресом F600(16). На рисунке 6.3 представлен результат
деассемблирования первых 32 байтов. Шестнадцатеричные нули в
конце фрагмента программы (преобразованы деассемблером в
команды ADD (Сложить)) представляют собой данные. Они
"хорошо" иллюстрируют высказанное ранее положение о том, что
нулевые данные нетипичны для ПЗУ-программ. Команда DB
(определить байт), предшествующая полю нулей, появилась как
реакция деассемблера на кодовую комбинацию, которая не может
быть преобразована в команду ассемблера (такая ситуация,
благодаря широкому набору команд, встречается довольно
редко).