Уроки Iczelion'а

       

Анализ:


Push_Client_State

Здесь особо нечего анализировать. Когда VxD получает сообщение DeviceIoControl, ebр уже указывает на CRS текущей VM. Мы вызываем макрос Push_Client_State, чтобы сохранить текущее состояние клиентских регистров в стеке. Позже мы восстановим их значение с помощью Pop_Client_State.

VMMCall Begin_Nest_V86_Exec

Hачинаем особый блок выполнения с помощью вызова Begin_Nest_V86_Exec.

assume ebp:ptr Client_Byte_Reg_Struc

mov [ebp].Client_dl,7 mov [ebp].Client_ah,2

Изменяем значения регистров dl и ah в CRS. Эти измененные значения будут использованы прерыванием.

mov eax,21h VMMCall Exec_Int

Exec_Int получает номер прерывания из eax. Мы помещаем в него нужное значение и вызываем Exec_Int.

VMMCall End_Nest_Exec Pop_Client_State

Когда Exec_Int возвращает значение, мы заканчиваем особый блок выполнения и восстанавливаем сохраненные значения клиентских регистров из стека.

Вы услышите, как ваш PC-спикер проигрывает 'bell'-символ (07h).

[C] Iczelion, пер. Aquila.





Содержание раздела