eXeL@B —› Программирование —› Отладочный цикл и Single Step. |
Посл.ответ | Сообщение |
|
Создано: 24 февраля 2010 01:00 · Личное сообщение · #1 Есть мой трейсер, который пошагово выполняет поток другого процесса. Поток выполняется до конца а потом уходит вглубь винды на удаление собственно самого потока. Так вот я продолжаю делать single step в надежде что придет таки EXIT_THREAD_DEBUG_EVENT, а он не приходит и отладочный цикл повисает после очередного ContinueDebugEvent в недрах ntdll. Почему не приходит EXIT_THREAD_DEBUG_EVENT? Как вообще следует определять конец функции потока? Брейкпоинт ставить в BaseThreadInitThunk чтобы ловить когда выйдет из функции потока? ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 24 февраля 2010 01:32 · Личное сообщение · #2 |
|
Создано: 27 февраля 2010 08:46 · Личное сообщение · #3 |
|
Создано: 28 февраля 2010 03:16 · Личное сообщение · #4 |
|
Создано: 28 февраля 2010 12:42 · Поправил: Clerk · Личное сообщение · #5 |
|
Создано: 28 февраля 2010 18:54 · Личное сообщение · #6 |
|
Создано: 01 марта 2010 10:11 · Личное сообщение · #7 Clerk пишет: Может у вас поток один ? не, как минимум три. ARCHANGEL пишет: А этот трейсер приоритет своего процесса, случайно, не поднимал? приоритет не трогал. ARCHANGEL пишет: А какой DEBUG EVENT приходит последним? Ну, перед зависанием? щас посмотрю... ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 01 марта 2010 10:41 · Личное сообщение · #8 Ты просто уходишь в глубь ntdll, вот и нету сообщения, тебе надо поставить "особый" бряк на выход из функции потока. При создании нового потока в отлачик передано будет сообщение, затем ты выставишь бряк на первую инструкцию поточной функции, а по срабатыванию прерывания из стека извлечешь адрес возрата из функции из потока (где необходимо закончить выставления инт3 или тф флага), ЗАДАЧА РЕШЕНА, Второй случай когда поток, уже работает, тут немного сложнее, ни когда не задучывался как реализовать останов отладчика, но можно сделать так: по-любому для конкретной версии операционной системы адрес вызова поточной функции один и тот же, можешь посмотреть и статически забить себе для разных версий ОС. Но это не красивый способ, нужно подумать как можно реализовать "красиво" эту задачу. По - любому после этого придет сообщение отладчику об завершении потока. |
|
Создано: 01 марта 2010 10:55 · Личное сообщение · #9 |
|
Создано: 01 марта 2010 11:19 · Личное сообщение · #10 |
|
Создано: 01 марта 2010 15:44 · Поправил: Clerk · Личное сообщение · #11 |
|
Создано: 02 марта 2010 16:52 · Личное сообщение · #12 Mag_3d пишет: Ты просто уходишь в глубь ntdll, вот и нету сообщения,тебе надо поставить "особый" бряк на выход из функции потока. Уходит естественно, но я думал что должно же все равно событие прийти. Но подозреваю что именно из-за трейс флага оно и не может прийти. Выкрутился тем самым "особым" бряком. ----- Реверсивная инженерия - написание кода идентичного натуральному |
eXeL@B —› Программирование —› Отладочный цикл и Single Step. |
Эта тема закрыта. Ответы больше не принимаются. |