Сейчас на форуме: 2nd, morgot, Rio, CDK123, zds, tyns777, tihiy_grom (+5 невидимых)

 eXeL@B —› Программирование —› Отладочный регистр Dr7 и его составление
Посл.ответ Сообщение


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 марта 2009 18:19
· Личное сообщение · #1

Кто занимался этим? Интересует построение значения для бряков на чтение, запись, доступ

-----
Research For Food




Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 03 марта 2009 18:22
· Личное сообщение · #2

daFix

когда я себе писал, выглядело так:

Code:
  1.          DWORD      Ctrl = 0;
  2.             context.ContextFlags = CONTEXT_DEBUG_REGISTERS;
  3.          if( !GetThreadContext( pi.hThread, &context ) ) return FALSE;
  4.          context.Dr6 = 0;
  5.          switch( TYPE )
  6.          {
  7.                  case EXECUTE:   Ctrl |= 0x00; break;
  8.                  case WRITE:     Ctrl |= 0x01; break;
  9.                  case ACCESS:    Ctrl |= 0x03; break;
  10.          }
  11.          switch( Size )
  12.          {
  13.                  case 1:                        Ctrl |= 0x00; break;
  14.                  case 2:                        Ctrl |= 0x04; break;
  15.                  case 4:                        Ctrl |= 0x0C; break;
  16.          }
  17.          Ctrl <<= 16;
  18.          switch( DRx )
  19.          {
  20.                  case 0:
  21.                                    context.Dr0 = Address;
  22.                                    Ctrl <<= 0;
  23.                                    context.Dr7 = ( context.Dr7 & 0xFFF0FFFF ) | 0x101 | Ctrl;
  24.                                    break;
  25.                  case 1:
  26.                                    context.Dr1 = Address;
  27.                                    Ctrl <<= 4;
  28.                                    context.Dr7 = ( context.Dr7 & 0xFF0FFFFF ) | 0x104 | Ctrl;
  29.                                    break;
  30.                  case 2:
  31.                                    context.Dr2 = Address;
  32.                                    Ctrl <<= 8;
  33.                                    context.Dr7 = ( context.Dr7 & 0xF0FFFFFF ) | 0x110 | Ctrl;
  34.                                    break;
  35.                  case 3:
  36.                                    context.Dr3 = Address;
  37.                                    Ctrl <<= 12;
  38.                                    context.Dr7 = ( context.Dr7 & 0x0FFFFFFF ) | 0x140 | Ctrl;
  39.                                    break;
  40.          }
  41.          if( !SetThreadContext( pi.hThread, &context ) ) return FALSE;





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 марта 2009 18:24
· Личное сообщение · #3

Какая оперативность и точность! Спасибо огромное, RSI!!!! Аж не верится)))

-----
Research For Food




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 03 марта 2009 18:26 · Поправил: progopis
· Личное сообщение · #4

А чего сложного то? Советую перечитать васм.ру.

P.S. Я через исключения делал. В обработчике SEH делал все махинации. Если надо могу приложить пример на асме.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 марта 2009 18:33
· Личное сообщение · #5

progopis
Давай, было бы интересно...

-----
Research For Food




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 03 марта 2009 18:38 · Поправил: progopis
· Личное сообщение · #6

Code:
  1.     ; SEH_prolog start
  2.     push fs:[0]
  3.     pop seh.PrevLink
  4.     mov seh.CurrentHandler,OFFSET SEHHandler
  5.     mov seh.SafeOFFSET,OFFSET _safe00
  6.     lea eax,seh
  7.     mov fs:[0],eax
  8.     mov seh.PrevEsp,esp
  9.     mov seh.PrevEbp,ebp
  10.     ; SEH_prolog end
  11.     int 1
  12.     jmp _detected1
  13. _safe00:
  14. ...
  15.     ; SEH_epilog start
  16.     push seh.PrevLink
  17.     pop fs:[0]
  18.     ; SEH_epilog end
  19. ;===================================================================== ==
  20.  SEHHandler PROC uses edx ebx ecx pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD
  21.     mov edx,pFrame
  22.     ASSUME edx:PTR SEH
  23.     mov eax,pContext
  24.     ASSUME eax:PTR CONTEXT
  25.     push [edx].SafeOFFSET
  26.     pop [eax].regEip
  27.     push [edx].PrevEsp
  28.     pop [eax].regEsp
  29.     push [edx].PrevEbp
  30.     pop [eax].regEbp
  31.     ; AntiDebggging feature - verify and reset hardware breakpoints
  32.     ASSUME edx:Nothing
  33.     lea edx,[eax].iDr0
  34.     mov ecx,4
  35. _sehh_hb:
  36.     mov ebx,[edx]
  37.     add edx,4
  38.     test ebx,ebx
  39.     jnz _hb_detected
  40.     loop _sehh_hb
  41.     jmp _sehh_next
  42. _hb_detected:
  43.     mov [eax].regEcx,9
  44.     mov [eax].regEip,OFFSET _detected1
  45. _sehh_next:
  46.     mov [eax].iDr0,0
  47.     mov [eax].iDr1,0
  48.     mov [eax].iDr2,0
  49.     mov [eax].iDr3,0
  50.     mov [eax].iDr6,0
  51.     mov [eax].iDr7,0
  52.     ; Execute program - exeption eliminated
  53.     mov eax,ExceptionContinueExecution
  54.     ret
  55.  SEHHandler ENDP

Код вырезан из проекта AntiSoftICE. Ну только это немного не в тему. Здесь не описывается сабж, а тупо сбрасывается.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 марта 2009 18:50
· Личное сообщение · #7

progopis
И тебе спасибо, тоже пригодится)))

-----
Research For Food





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 03 марта 2009 19:53
· Личное сообщение · #8

Вот этого www.wasm.ru/article.php?article=debugreg и мана интела в своё время хватило выше крыши для написания, в том числе и для х64.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 марта 2009 20:12 · Поправил: daFix
· Личное сообщение · #9

Archer
Ух ты блин! Вот это я упустил... Хорошая дока

ADDED:
progopis
Раскаиваюсь)))

Clerk
Ну это уж слишком круто, цель не оправдывает средства

-----
Research For Food




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 03 марта 2009 20:13
· Личное сообщение · #10

Тут покруче, уже можно назвать эмулятором wasm.ru/forum/attachment.php?item=3008
Ставим как сех-фрейм и юзоем mov Dr0,Eax и остальное как угодно. Гдето был ядерный вариант.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 03 марта 2009 20:18
· Личное сообщение · #11

daFix пишет:
Ух ты блин! Вот это я упустил..


progopis пишет:
Советую перечитать васм.ру.



 eXeL@B —› Программирование —› Отладочный регистр Dr7 и его составление
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати