Семантический анализ структуры EXE файла и дисассемблер (с примерами и исходниками), вирусология
Категория реферата: Рефераты по информатике, программированию
Теги реферата: бесплатные рефераты скачать бесплатно, товар реферат
Добавил(а) на сайт: Gorev.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
Применяется для хранения базового адреса некоторого объекта в памяти;
. ecx/cx/ch/cl (Count register) — регистр-счетчик.
Применяется в командах, производящих некоторые повторяющиеся действия.
Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды.
К примеру, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра ecx/cx;
. edx/dx/dh/dl (Data register) — регистр данных.
Так же, как и регистр eax/ax/ah/al, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно.
Следующие два регистра используются для поддержки так называемых цепочечных
операций, то есть операций, производящих последовательную обработку цепочек
элементов, каждый из которых может иметь длину 32, 16 или 8 бит:
. esi/si (Source Index register) — индекс источника.
Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;
. edi/di (Destination Index register) — индекс приемника (получателя).
Этот регистр в цепочечных операциях содержит текущий адрес в цепочке- приемнике.
В архитектуре микропроцессора на программно-аппаратном уровне
поддерживается такая структура данных, как стек. Для работы со стеком в
системе команд микропроцессора есть специальные команды, а в программной
модели микропроцессора для этого существуют специальные регистры:
. esp/sp (Stack Pointer register) — регистр указателя стека.
Содержит указатель вершины стека в текущем сегменте стека.
. ebp/bp (Base Pointer register) — регистр указателя базы кадра стека.
Предназначен для организации произвольного доступа к данным внутри стека.
Стек
Стеком называют область программы для временного хранения произвольных данных. Разумеется, данные можно сохранять и в сегменте данных, однако в этом случае для каждого сохраняемого на время данного надо заводить отдельную именованную ячейку памяти, что увеличивает размер программы и количество используемых имен. Удобство стека заключается в том, что его область используется многократно, причем сохранение в стеке данных и выборка их оттуда выполняется с помощью эффективных команд push и pop без указания каких-либо имен.
Стек традиционно используется, например, для сохранения содержимого
регистров, используемых программой, перед вызовом подпрограммы, которая, в
свою очередь, будет использовать регистры процессора "в своих личных
целях". Исходное содержимое регистров изатекается из стека после возврата
из подпрограммы. Другой распространенный прием - передача подпрограмме
требуемых ею параметров через стек. Подпрограмма, зная, в каком порядке
помещены в стек параметры, может забрать их оттуда и использовать при своем
выполнении. Отличительной особенностью стека является своеобразный порядок
выборки содержащихся в нем данных: в любой момент времени в стеке доступен
только верхний элемент, т.е. элемент, загруженный в стек последним.
Выгрузка из стека верхнего элемента делает доступным следующий элемент.
Элементы стека располагаются в области памяти, отведенной под стек, начиная
со дна стека (т.е. с его максимального адреса) по последовательно
уменьшающимся адресам. Адрес верхнего, доступного элемента хранится в
регистре-указателе стека SP. Как и любая другая область памяти программы, стек должен входить в какой-то сегмент или образовывать отдельный сегмент.
В любом случае сегментный адрес этого сегмента помещается в сегментный
регистр стека SS. Таким образом, пара регистров SS:SP описывают адрес
доступной ячейки стека: в SS хранится сегментный адрес стека, а в SP -
смещение последнего сохраненного в стеке данного (рис. 4, а). Обратитим
внимание на то, что в исходном состоянии указатель стека SP указывает на
ячейку, лежащую под дном стека и не входящую в него.
[pic]
Рис 4. Организация стека: а - исходное состояние, б - после загрузки одного
элемента (в данном примере - содержимого регистра АХ), в - после загрузки
второго элемента (содержимого регистра DS), г - после выгрузки одного
элемента, д - после выгрузки двух элементов и возврата в исходное
состояние.
Загрузка в стек осуществляется специальной командой работы со стеком push (протолкнуть). Эта команда сначала уменьшает на 2 содержимое указателя стека, а затем помещает операнд по адресу в SP. Если, например, мы хотим временно сохранить в стеке содержимое регистра АХ, следует выполнить команду push АХ
Стек переходит в состояние, показанное на рис. 1.10, б. Видно, что
указатель стека смещается на два байта вверх (в сторону меньших адресов) и
по этому адресу записывается указанный в команде проталкивания операнд.
Следующая команда загрузки в стек, например, push DS
переведет стек в состояние, показанное на рис. 1.10, в. В стеке будут
теперь храниться два элемента, причем доступным будет только верхний, на
который указывает указатель стека SP. Если спустя какое-то время нам
понадобилось восстановить исходное содержимое сохраненных в стеке
регистров, мы должны выполнить команды выгрузки из стека pop (вытолкнуть): pop DS
pop AX
Какого размера должен быть стек? Это зависит от того, насколько
интенсивно он используется в программе. Если, например, планируется хранить
в стеке массив объемом 10 000 байт, то стек должен быть не меньше этого
размера. При этом надо иметь в виду, что в ряде случаев стек автоматически
используется системой, в частности, при выполнении команды прерывания int
21h. По этой команде сначала процессор помещает в стек адрес возврата, а
затем DOS отправляет туда же содержимое регистров и другую информацию, относящуюся к прерванной программе. Поэтому, даже если программа совсем не
использует стек, он все же должен присутствовать в программе и иметь размер
не менее нескольких десятков слов. В нашем первом примере мы отвели под
стек 128 слов, что безусловно достаточно.
Структура программы на ассемблере
Программа на ассемблере представляет собой совокупность блоков
памяти, называемых сегментами памяти. Программа может состоять из одного
или нескольких таких блоков-сегментов. Каждый сегмент содержит совокупность
предложений языка, каждое из которых занимает отдельную строку кода
программы.
Предложения ассемблера бывают четырех типов:
Рекомендуем скачать другие рефераты по теме: реферат менеджмент, вопросы и ответы.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата