|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 19, 2003 13:17:00 Привет All! Недавно заметил что на системах w9x всё что ниже esp постояно меняетса (может быть прерывания). Интересный ефект наблюдаетса когда поставит DRx регистер указывать на esp-4. Потом, даже если сами меняем esp, стёк остаётса полностъю нетронутым, даже низкие адреса! Может кто кто сможет прояснит ситуацию? Тэнкс. |
|
|
Дата: Ноя 19, 2003 14:05:07 если ты это заметил в отладчиках уровня приложения, то это они стек и юзают. на этом основан древний прием антиотладки... |
|
|
Дата: Ноя 19, 2003 14:44:07 · Поправил: merlin Буду по подробней. Написал я маленкий прог под NT в котором играюсь с esp. Работает ништяк. Под 9x, однако получаю protection fault. Открываю SIce, ставлю bpm на новый esp минус 4. Работает ништяк! 8O Пытаюсь ручками установит DRx регистры (прямо используя mov). Устанавливаю всё по законам Интела. Резултат, protection fault. Открываю SIce. Выесняетса что код сходит с релсь! В прямом смысле! Работает нормально до тех пор пока я его не меняю, но как только поменял -> хона! Нахожу себя на странном eip, в моём же коде. Выглядит как будто произошол breakpoint, но ведь никто там breakpoint'ов не устонавливал! |
|
|
Дата: Ноя 19, 2003 17:50:39 Твой protection fault может быть следствием срабатывания DR-регистров. Ведь происходит int 1. Код покажи. |
|
|
Дата: Ноя 19, 2003 18:47:40 · Поправил: merlin Например: call $+5 lea edi, dword [esp+4] sub dword [esp], XXX ; так будет указывать на начало даных (в плотную к header'у) mov esp, [esp] loop1: ; Здесь издеваюсь над даными ; Проверяю одно условие, если оно ОК тогда меняю ; два nop'а на "jmp esp" nop nop jmp loop1 Если запустить этот код просто так тогда будет выдавать protection fault, потому что header защищён. Если в айсе установить bpm на 400FFC (esp-4), тогда всё пройдёт нормально, и стёк вообше не тронетса ни кем. Так почему бы нам самим не установит эти DRx'ы. Делаю тред: push bpmHand push dword [fs:0] mov [fs:0], esp mov eax, 400FFCh mov dr3, eax mov eax, dr6 and eax, 0FFFF0FF0h mov dr6, eax mov eax, 0F0000540h mov dr7, eax not byte [Ready] ; Синхронизирую @@ThreadLoop: mov ax, word [nops] cmp ah, al je @@ThreadLoop ; Здесь выползаю из треда и чищю DRx'ы ... bpmHand: mov eax, dword [esp+4] mov eax, [eax] cmp eax, 80000004h ; Single step jne @@notDR3 mov eax, dr6 test eax, 8 jz @@notDR3 and eax, 0FFFF0FF0h mov dr6, eax xor eax, eax ; Continue execution ret @@notDR3: push 1 pop eax ; Next handler ret Всё вроде должно работать нормально, но... Получяетса protection fault. Как бы это не показалось страным нахожу себя на один байт вперёд после инструкции "jmp esp" (уже не nop'ы, а замен произошол только что). Вот здесь я и сел на мель. |
|
|
Дата: Ноя 19, 2003 20:24:17 Сорри, это 9x. Я его не знаю. Там, выходит, можно писать в dr в третьем кольце? Обалдеть... Но, кажется мне, ты делаешь глупость, когда ставишь DR на программу. Произойдет int 1. Я не знаю, какой у нее DPL под 9x. И программа слетит! Попробуй проверять на EXCEPTION_ACCESS_VIOLATION - там и причина понятной станет. |
|
|
Дата: Ноя 19, 2003 22:32:13 Да в обшем то я тоже не очен то разбираюсь в 9х. А то что можно писать в dr реги с третьего кольца меня тоже поразило в первый раз. А вот насчёт int 1, гдеж ему происходить? Может подправку eip сделать, так на всякий пожарный. Думаеш EXCEPTION_ACCESS_VIOLATION стоит проверить? Сейчас я с ним ещё чюток потанцую и заодно проверю. |
|
|
Дата: Ноя 19, 2003 22:53:32 А вот насчёт int 1, гдеж ему происходить? Разумеется, после срабатывания DR-регистра. |
|
|
Дата: Ноя 20, 2003 00:36:53 А я всё думаю про какой тут стёк речь идёт :-) |
|
|
Дата: Ноя 20, 2003 03:29:17 · Поправил: merlin @volodya: А ну конечно, я думал про что то другое. Но ведь всётаки я перехватываю single step, правда толку от этого... Может в DR7 поставить global? @Asterix: Из короткого текста програмы можно понять что я вообщем расшифровываю определёный кусок прога, и потом его запускаю. Для изящности решил использовать стёк. Перенаправил esp на мои даные, а потом исползуя команды push/pop очень красиво оперирую ими (даными) , и одновремено, незаметно (почти) продвигаюсь по всему имежу. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047 |