Отладка приложений


Полный пример


Представив все важные части языка Intel-ассемблера, обратимся к полному примеру одной из API-функций операционных систем Win32. В листинге 6.2 показан полностью прокомментированный дизассемблерный код функции IstrcpyA из библиотеки KERNEL32.DLL пакета обслуживания Service Pack 4 операционной системы Windows NT 4. Функция IstrcpyA копирует одну строку в другую. Эту функция выбрана потому, что она показывает понемногу все, что обсуждалось до сих пор в этой главе, а также потому, что цель этой функции легко понять. Комментарии, выделенные точками с запятой, делают их настолько подробными, насколько это возможно.

Листинг 6-2. IstrcpyA- полный пример на языке ассемблера

; Прототип функции:

; LPTSTR Istrcpy ( LPTSTR IpStringl , LPCTSTR lpString2 )

IstrcpyA:

; Начать подготовку к установке SEH-кадра.

77F127E6: MOV EAX , ES:[00000000h]

; Установить регулярный кадр стека.

77F127EC: PUSH EBP

77F127ED: MOV EBP , ESP

; Продолжить установку SEH-кадра.

77F127EF: PUSH OFFh

77F127F1: PUSH 77F3CD48h

77F127F6: PUSH _except_handler3

77F127FB: PUSH EAX

77F127FC: MOV DWORD PTR FS:[00000000h] , ESP

; Сохранить 12 байтов для локальных переменных.

77F12803: SUB ESP , 00Ch

; Сохранить значения регистра, которые будут разрушены

; как часть этой функции

77F12806: PUSH EBX

77F12807: PUSH ESI

77F12808: PUSH EDI

Сохранить текущую вершину стека в локальной переменной.

Эта строка - также часть установки SEH. 

7F12809: MOV DWORD PTR [EBP-018h] , ESP

Инициализировать эту локальную переменную к 0. Эта строка указывает,

что функция входит в блок _try. 

77F1280C: MOV DWORD PTR [EBP-004h] , 00000000h

Первый шаг после установки должен получить длину строки

копирования. Строка копирования - второй параметр.

Переместить второй параметр (строку, которая будет скопирована) в EDI.

77F12813: MOV EDI , DWORD PTR [EBP+OOCh]

Istrcpy будет просматривать 4,294,967,295 байтов до NULL-терминатора.

EDX используется позже со значением -1, а здесь он инициализируется.

Помните, что REPNE SCAS использует регистр ЕСХ как счетчик цикла.




Начало  Назад  Вперед



Книжный магазин