![]() |
eXeL@B —› Вопросы новичков —› Про брэкпоинты |
Посл.ответ | Сообщение |
|
Создано: 06 апреля 2007 03:48 · Личное сообщение · #1 |
|
Создано: 06 апреля 2007 05:24 · Личное сообщение · #2 В общих чертах: Вариант 1 Отладчик заменяет первый байт инструкции на CCh (int3). Процессор, получая этот байт, генерирует отладочное прерывание. Отладчик берёт управление из прерывания на себя. Главный недостаток - изменяется значение в памяти (контрольная сумма - и пипец). Можно так же поставить собственный обработчик прерывания, но суть от этого не изменится. Вариант 2 В один из четырёх DR-отладочных регистров процессора, помещается адрес инструкции и проц генерирует int1, при условии EIP=DR0 or DR1 or DR2 or DR3. Это так называемые железные бряки. Главный недостаток – бряков одновременно можно ставить всего 4. Вариант 3 Бряк на обращение к памяти (читай учебники или ищи по форуму - RTFM). ----- Всем привет, я вернулся ![]() |
|
Создано: 06 апреля 2007 17:58 · Личное сообщение · #3 Спасибо за ответ! А ты не мог бы в общих чертах обьяснить про перехвативание API. Есть такой способ - первые пять байтов поменять на длинный JMP. И в этой фразой у меня возникло 2 вопроса - 1) Где менять 5 байт 2)Куда прыжек (Как я понял в адресном пространстве dll записываеш твой код и прыжек на него - правильно?) ![]() |
|
Создано: 06 апреля 2007 21:50 · Поправил: sniperZ · Личное сообщение · #4 satana пишет: 1) Где менять 5 байт В начале функции, которую хочешь перехватить. Адрес м0жешь получить с помощью GetProcAddress... ![]() satana пишет: 2)Куда прыжек (Как я понял в адресном пространстве dll записываеш твой код и прыжек на него - правильно?) Правильно. Эти 5 байт и предназначены для прыжка на твой код. ![]() ![]() |
|
Создано: 07 апреля 2007 01:05 · Личное сообщение · #5 |
|
Создано: 07 апреля 2007 01:10 · Личное сообщение · #6 |
|
Создано: 07 апреля 2007 02:44 · Личное сообщение · #7 satana, RTFM! Ну, ты хоть чуть-чуть по форуму поищи, прежде чем вопросы задавать! В любом учебнике по Асму написано: jmp offset бывает трёх видов: - короткий (опкод 1 байт + относительное смещение 1 байт). - длинный (опкод 2 байта + относительное смещение 4 байта). - дальний (тебе это не нужно, far-jmp используется для смены сегмента). Короткий jmp может покрыть переход от текущего смещения только пределах -128 +127. Дальше используется длинный. satana пишет: Что такое token процесса? И еще довольно часто встречается thread - что это? Срочно читать Дневники чайника! А лучше сразу ищи книгу: Джеффри РИХТЕР "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows". ----- Всем привет, я вернулся ![]() |
|
Создано: 07 апреля 2007 03:00 · Личное сообщение · #8 |
![]() |
eXeL@B —› Вопросы новичков —› Про брэкпоинты |
Эта тема закрыта. Ответы больше не принимаются. |