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


Доступ к параметрам, глобальным и локальным переменным


Теперь рассмотрим доступ к переменным. Глобальные переменные — самые легкие для доступа, потому что при этом обращение к памяти происходит по фиксированному адресу. Если имеется символьная информация для адреса конкретного модуля, то возможно получение для просмотра и имени глобальной переменной. Следующий пример показывает, как выполнить доступ к глобальной переменной через встроенный ассемблер. Во встроенном ассемблере переменные могут выступать либо как источник, либо как приемник, в зависимости от инструкции. В комментариях внимание читателя обращается на то, что может показывать окно Disassembly для данной операции в зависимости от того, загружены ли символы.

int g_iVal = 0 ;

void AccessGlobalMemory ( void )

_asm 

{

// Установить в глобальной переменной значение 48,059.

MOV g_iVal , OBBBBh

// Если символы загружены, окно Disassembly покажет

// MOV DWORD PTR [g_iVal (00403060)],OBBBBh.

// Если символы не загружены, окно Disassembly покажет

// MOV DWORD PTR [00403060],OBBBBh. 

}

Если для функции определены стандартные стековые кадры, то параметры имеют положительные смещения от регистра ЕВР. В том случае, если за время жизни функции значение ЕВР не изменяется, параметры появляются в тех же самых положительных смещениях, потому что прежде чем вызывать процедуру, параметры помещаются в стек. Следующий код показывает доступ к параметрам.

void AccessParameter ( int iParam )

 {

_asm 

{

// Переместить значение iParam value в регистр ЕАХ.

MOV ЕАХ , iParam

// Если символы загружены, окно Disassembly будет показывать

// MOV ЕАХ,DWORD PTR [iParam].

// Если символы не загружены, окно Disassembly будет показывать 

// MOV ЕАХ,DWORD PTR [ЕВР+8].

 }

 } 

Если при отладке оптимизированного кода отображаются ссылки, которые имеют положительное смещение от регистра стека ESP, значит это функция, которая имеет FPO-данные. Поскольку во время жизни функции содержимое ESP может изменяться, то работа с параметрами немного затрудняется.


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