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


         

и регистров, как показано на


iLocal2 = *pParam2 ; 

}

// Дизассемблерный код AccessLocalsAndParamsExample 

//с адресами стандартного пролога функции

00401097 PUSH EBP

00401098 MOV EBP , ESP

0040109A SUB ESP , 8

// int iLocal1 = 3 ;

0040109D MOV DWORD PTR [EBP-8h] , 3

// int iLocal2 = 0x42 ;

004010A4 MOV DWORD PTR [EBP-4h] , 42h

// iLocal1 = *pParaml ;

004010AB MOV EAX , DWORD PTR [EBP+8h]

004010AE MOV ECX , DWORD PTR [EAX]

004010BO MOV DWORD PTR [EBP-08h] , ECX

// iLocal2 = *pParam2 ;

004010B3 MOV EDX , DWORD PTR [EBP+OCh]

004010B6 MOV EAX , DWORD PTR [EDX]

004010B8 MOV DWORD PTR [EBP-4h] , EAX

// Стандартный эпилог функции

004010BB MOV ESP , EBP

004010BD POP EBP

004010BE RET

}

Если точка прерывания устанавливается в начале функции AccessLocalsAndParamsExample (по адресу 0x00401097), то будут отображены

значения стека и регистров, как показано на рис. 6.2.

Рис. 6.2. Стек перед прологом функции AccessLocalsAndParamsExample

Первые три инструкции языка ассемблера в AccessLocalsAndParamsExaraple составляют пролог функции. После выполнения пролога устанавливаются указатели стека (ESP) и базы (ЕВР), доступ к параметрам выполняется через положительные смещения от ЕВР, а к локальным переменным — через отрицательные смещения от ЕВР. На рис. 6.3 показаны значения указателей стека и базы после выполнения каждой инструкции пролога.

Рис. 6.3. Стек в течение и после выполнения пролога функции AccessLocalsAndParamsExample



Содержание  Назад  Вперед