Уроки Iczelion'а


         

к рассматриваемой теме. Когда случается


Вернемся к рассматриваемой теме. Когда случается отладочное событие, Windows замораживает отлаживаемый процесс. Его контекст сохраняется. Так как он заморожен, мы можем быть уверены, что значения контекста останутся неизменными. Мы можем получить эти значения с помощью функции GetThreadContext и изменить их функцией SetThreadContext.
Это две очень мощные ApI-функции. С их помощью у вас есть власть над отлаживаемым процессом, обладающая возможностями VxD: вы можете изменять сохраненные регистры и как только процесс продолжит выполнение, значения контекста будут записаны обратно в регистры. Любое изменение контекста отразится над отлаживаемым процессом.
Подумайте об этом: вы даже можете изменить значение регистра eiр и повернуть ход исполнения программы так, как вам это надо! В обычных обстоятельствах вы бы не смогли этого сделать.
GetThreadContext proto hThread:DWORD, lpContext:DWORD
  • hThread - хэндл треда, чей контекст вы хотите получить

  • lрContext - адрес структуры CONTEXT, которая будет заполнена соответствующими значениями, когда функция передаст управление обратно

  • У функции SetThreadContext точно такие же параметры. Давайте посмотрим, как выглядит структура CONTEXT:
    CONTEXT STRUCT
    ContextFlags dd ? ;------------------------------------------------------------------------ ; Эта секция возвращается, если ContextFlags содержит значение ; CONTEXT_DEBUG_REGISTERS ;------------------------------------------------------------------------
    iDr0 dd ? iDr1 dd ? iDr2 dd ? iDr3 dd ? iDr6 dd ? iDr7 dd ?
    ;------------------------------------------------------------------------ ; Эта секция возвращается, если ContextFlags содержит значение ; CONTEXT_FLOATING_pOINT ;------------------------------------------------------------------------
    FloatSave FLOATING_SAVE_AREA <>
    ;------------------------------------------------------------------------ ; Эта секция возвращается, если ContextFlags содержит значение ; CONTEXT_SEGMENTS ;------------------------------------------------------------------------

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