Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Подскажите как организовать логику отладчика |
Посл.ответ | Сообщение |
|
Создано: 30 июня 2011 17:22 · Поправил: daFix · Личное сообщение · #1 Думаю что много кто тут писал отладчики, поэтому мож кто подскажет. Понимаю что за много лет я уже запарил тут всех подобными вопросами На данный момент хардварные бряки у меня устроены слегка коряво Code:
Тоесть в обработчике делается SingleStep и бряк ставится обратно. Тоесть EIP уже будет стоять на следующей команде после бряка. Это конечно был костыль, но сейчас мне надо как-то избавится от него. Можно конечно не восстанавливать его в обработчике, но очень хотелось бы чтобы они работали как в ольке. Оно вроде и легко на первый взгляд, но пока не нашёл подходящего решения. Буду рад любым свежим мыслям! ADDED: Ну и тогда уже до кучи - выполняются ли другие потоки, если один поток встал на EXCEPTION_BREAKPOINT? ----- Research For Food |
|
Создано: 30 июня 2011 21:38 · Поправил: Модератор · Личное сообщение · #2 |
|
Создано: 01 июля 2011 00:32 · Поправил: ajax · Личное сообщение · #3 |
|
Создано: 01 июля 2011 14:47 · Личное сообщение · #4 |
|
Создано: 03 июля 2011 01:17 · Личное сообщение · #5 RF — признак маскирования ошибок отладки, при установке значения RF=1 возможные ошибки отладки игнорируются при выполнении следую- щей команды; используется в процессе отладки программ; Поймали исключение сингл степ, возвели RF флаг, DBG_CONTINUE и вперёд. Вот что происходит при запуске Code:
Непонятные числа 00000206 и 00020206 - это EFlag до и после возведения флага Глянул UGdbg, много интересного можно там подглядеть, но конкретно по сабжу не нашёл Уже бьюсь в истерике ----- Research For Food |
|
Создано: 03 июля 2011 03:20 · Поправил: ajax · Личное сообщение · #6 ----- От многой мудрости много скорби, и умножающий знание умножает печаль |
|
Создано: 03 июля 2011 09:38 · Личное сообщение · #7 |
|
Создано: 04 июля 2011 08:38 · Личное сообщение · #8 |
|
Создано: 04 июля 2011 12:53 · Личное сообщение · #9 |
|
Создано: 15 июля 2011 00:31 · Личное сообщение · #10 |
|
Создано: 15 июля 2011 16:21 · Личное сообщение · #11 Сейчас надо закончить несколько проектов, и вернусь к написанию отладчика. Rockphorr Звучит адски, т.к. стрелять по мухам из пушки не целесообразно в моём случае, да и цена там будет не с двумя нулями зелёных ARCHANGEL Верно ли я понял, во время исключения система тормозит все потоки, а при запуске, олька стартует все потоки кроме главного через ResumeThread? ----- Research For Food |
|
Создано: 15 июля 2011 18:25 · Личное сообщение · #12 |
|
Создано: 16 июля 2011 00:35 · Личное сообщение · #13 |
|
Создано: 23 сентября 2011 00:01 · Личное сообщение · #14 Опять понадобился горе-отладчик и решил добить его. Думаю что ошибка кроется в том что я просто работаю с контекстом не того потока. if (IsMyHWBreak((int)Addr)) { Log("Handled Hardware Breakpoint at " + IntToHex(Addr,8)); cntxt.ContextFlags = CONTEXT_FULL; GetThreadContext( pi.hThread, &cntxt); cntxt.EFlags = cntxt.EFlags |= 1 << 16;// 0x8000; SetThreadContext(pi.hThread, &cntxt); dwContinueStatus = DBG_CONTINUE; return 1; } pi - это структура PROCESS_INFORMATION, полученная при создании процесса. Если это так, тогда можно объяснить непонятные ошибки при отладке многопоточных приложений. Значит делаем GetThreadContext(OpenThread(DebugEvent.dwThreadId, ..., ...), &cntxt); так? ----- Research For Food |
|
Создано: 23 сентября 2011 00:05 · Личное сообщение · #15 daFix GetThreadContext(OpenThread(DebugEvent.dwThreadId, ..., ...), &cntxt); Такой подход жутко тормозит. OpenThread очень медленная, чтоб так её постоянно вызывать. Лучше хранить массив, по которому по известному идентификатору можно найти описатель потока. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 сентября 2011 00:21 · Личное сообщение · #16 |
|
Создано: 23 сентября 2011 02:48 · Личное сообщение · #17 Проблема не решилась Сейчас нашёл одну странную странность! SetThreadContext не ставит контекст о_О Code:
Последний GetThreadContext показывает что EFlags ни что не изменился Я опять в тупике ----- Research For Food |
|
Создано: 23 сентября 2011 07:51 · Личное сообщение · #18 |
|
Создано: 23 сентября 2011 08:21 · Поправил: bowrouco · Личное сообщение · #19 Code:
EXIT_ALL macro: Code:
Code:
Intel® 64 and IA-32 Architectures Software Developer’s Manual V.2A, 3-490 |
|
Создано: 23 сентября 2011 08:24 · Личное сообщение · #20 |
|
Создано: 23 сентября 2011 14:04 · Личное сообщение · #21 |
|
Создано: 23 сентября 2011 14:28 · Поправил: daFix · Личное сообщение · #22 PE_Kill Объявил эту структуру как локальную и использую в нескольких функциях, вызываемых в разное ремя. Так вот так косяцит только в этом месте, тоесть выравнивание тут точно не поможет. Винда XP 32 бита. bowrouco прав, все функции возвращают TRUE. Я уже на всякий случай и суспендил поток, потом возобновлял его. Хотя он и так вроде в суспенде лежит bowrouco пишет: #define EFLAGS_RF 0x00010000L Угу, у меня так и есть Hellspawn Делал CONTEXT_CONTROL, разницы нету ----- Research For Food |
|
Создано: 23 сентября 2011 20:26 · Поправил: bowrouco · Личное сообщение · #23 daFix Если не понятно в коде, скажу напрямую. Нет смысла использовать RF. Вы не в ядре, у вас нет привилегий для управления этим флагом(приведу пример, серия из Int 0x2A(CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A...) не трейсится). Этот флаг вообще вам и не нужен. Для достижения профита смотрите KeContextToKframes() и обратную её апи, либо спросите там, где вам подробно обьеснят |
|
Создано: 23 сентября 2011 20:44 · Личное сообщение · #24 bowrouco пишет: Вы не в ядре, у вас нет привилегий для управления этим флагом daFix, вспомните нашу вчерашнюю беседу в аське. И делайте как я предлагал. Всё выйдет. серия из Int 0x2A(CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A CD 2A...) не трейсится) Она не не трейсится, она проскакивает, т.е. трейс идёт, но останов сработает на второй инструкции за этой конструкцией, что позволяет использовать способ с TF. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 сентября 2011 21:02 · Поправил: bowrouco · Личное сообщение · #25 ARCHANGEL Из за хардварной установки RF на iret при т-процессинге взводится RF, это отлаживает трап до следующей инструкции, а там снова вызов шлюза. Таким образом на данной последовательности трап не генерится. Выше я привёл код, который возвращает управление в юзермод. | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 23 сентября 2011 23:39 · Личное сообщение · #26 |
|
Создано: 24 сентября 2011 10:45 · Поправил: bowrouco · Личное сообщение · #27 daFix Да. Флажки корректируются при конвертациях т-фрейма в контекст и обратно. Те, на которые налаживается корректирующая маска нельзя изменить. Есчо и не нужно. add: Посмотрел константу для XP, в начале KeContextToKframes() есть следующая конструкция: Code:
Тоесть в символическом виде: Code:
В сурсах это макро SANITIZE_FLAGS: Code:
Из за RF кстате вы можите думать что из Sysenter управление возвращается на следующую за ней инструкцию. На самом деле это не так. | Сообщение посчитали полезным: daFix |
|
Создано: 24 сентября 2011 13:59 · Поправил: daFix · Личное сообщение · #28 Беру свои слова про то что bowrouco "особо ни кому не помогает", обратно Что-же, верну тогда всё на место, пусть будет через SingleStep сделано. От одного глюка с потоками избавился, и этого уже достаточно пока. Спасибо всем кто откликнулся. Тему не закрываю, может потом ещё подниму её. Всёравно ни кто тут не флудит ----- Research For Food |
|
Создано: 24 сентября 2011 14:06 · Личное сообщение · #29 daFix пишет: Беру свои слова про то что bowrouco "особо ни кому не помогает", обратно Да он походу от степени накуренности отвечает. Сейчас с травой напряг и пишет вполне осмысленно, причем даже вполне соответствует своей квалификации, но вот когда травы много он становится довольно странным чудаком, который заканчивает пребывание на форуме баном. ----- Yann Tiersen best and do not fuck |
|
Создано: 24 сентября 2011 21:26 · Личное сообщение · #30 PE_Kill А есчо у меня есть матчасть, написанная инде под воздействием веществ: Code:
Это не делает рихтера мной, и не попрёт вам. Но даёт ответы на вопросы тс. Вы же идёте лесом |
eXeL@B —› Программирование —› Подскажите как организовать логику отладчика |