![]() |
eXeL@B —› Программирование —› Back- tracing |
Посл.ответ | Сообщение |
|
Создано: 05 июня 2009 00:07 · Поправил: mak · Личное сообщение · #1 ![]() Также требуется 2 метода бэктраса , первый это просто трасинг назад с изменением регистров и стэка , второй метод , более особый , возможно даже расширение первого , это отслеживание изменений в самой программе , ее кода , данных и так далее. Задача сложна ...есть много ньюансов , но на первых парах , бэк второго типа предназначен пока для легкого кода ... Также было бы хорошо чтобы задавать границы бэк траса ..то есть скажем историю возврата ...полная , или по выбранному размеру. Теоретически это все должно быть в дровине. Сложность в нестандартной реализации процеса трасинга. Волнует также момент , когда нет особого контроля за программой , она выполняется как бы в режиме ран , но при этом основные брэйки стоят на месте. Могу ли я как то неявно контролировать трассу в методе запуска РАН. в принцыпе наверное это возможно. Но Олидебуг , это не выполняет например, режим ран просто , и истории просто нету бэктраса. Вот такие мелочи было бы классно обсудить ![]() ![]() P.S. Забыл сказать , еще интересно оптимизация процесса , например скажем построение дерева с архивными структурами , но в данном случае уже интерес представляет компактная имплементация. Также хочется заметить что часть кода может выполнятся выборочно на вм тачке ...поэтому наверное надо и это учесть , хоть и на вм проще наверное контролировать заднюю трасировку. Но не весь код будет проэмулирован. ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 05 июня 2009 00:53 · Личное сообщение · #2 Предложения mak пишет: Клоню к тому что моменты связанные с привязкой к определнным архитектурам отладки по возможности хочется избежать. и mak пишет: Теоретически это все должно быть в дровине противоречат друг-другу. Драйвер - это как раз полнейшая привязка к архитектуре. Хочешь без привязки к архитектуре - делай эмулятор выполнения кода с записью всех изменений. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 05 июня 2009 13:50 · Личное сообщение · #3 Под архитектурой отладки имеется ввиду , метод реализации отладочного процесса. Поэтому противоречий не вижу ![]() ![]() ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 05 июня 2009 18:06 · Личное сообщение · #4 |
|
Создано: 05 июня 2009 18:14 · Личное сообщение · #5 |
|
Создано: 05 июня 2009 18:32 · Личное сообщение · #6 |
|
Создано: 05 июня 2009 18:50 · Личное сообщение · #7 |
|
Создано: 05 июня 2009 18:58 · Личное сообщение · #8 |
|
Создано: 05 июня 2009 20:09 · Поправил: mak · Личное сообщение · #9 Jupiter пишет: простейший вариант - это собственный двиг, полностью подменяющий Debug API - тогда можешь использовать в качестве интерфейса любой отладчик, основанный на Debug API Это классная идея ![]() SLV пишет: и как ты сделаешь бектрейс после какого-нибудь вызова API, к примеру RegisterClass. имхо очередной топ в котором через 20 постов тс напишет что все ламеры можно закрывать. Сам начинаешь косить на топ через 20 постов ![]() Некоторые Функции можно пропустить , другие исследовав подробно их работу ревертировать , можно сделать например PREDUMP если идет изменение памяти программы , можно брать параметры апи функций и записывать их , а также сохранять бывшее состояние , это будет оптимальнее по затратам ресурсов. Или если например АПИ отхучена , и при выполнении апи выполнится еще что то , тоже мелочь но требует осмысления. AlexZ Цыклы скорее всего будут все выполнятся на виртуальной машине , поэтому их откат будет думаю проще. Если же строить граф , то скорее стоит поэксперементировать в р3 ... что то пробное накатать. P.S. Лишние сообщения не по теме будут удалятся , обсуждайте пожалуста только реализацию ...нет мыслей ..пусть будет чистый топ. С мыслями глупый топ пишите в приват , выслушаю каждого , сегодня за бесплатно ![]() ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 05 июня 2009 21:24 · Личное сообщение · #10 Трассировать каждую инструкцию и сохранять полный контекст потока и стек в пределах +/- 800 байт. Многа очень памяти нужно. Потом можно и назад пройти, посмотрев состояние процессора на момент каждой инструкции. Иначе ничего не будет, просто стековые фреймы развернуть гдето внутри процедуры не надёжно и не эффективно. Хотя протрассировать тоже проблема большая. Пропускать ничего нельзя, ни одной инструкции. ![]() |
|
Создано: 24 июля 2009 13:30 · Личное сообщение · #11 Как можно отследить память процесса , ее изменения в выделенном процессе, чтобы строить потом карту изменений памяти процесса. Хукать апи работы с памятью , но это не идеальный вариант. Нужно что то вроде Мемори процесс Монитор. Можно ли это сделать из ядра какнибудь , просто и эффективно ? Вообще рассмотрел бы два варианта как из р3 так и из р0 , но на будущее р0 конечно должен быть ... Clerk пишет: Пропускать ничего нельзя, ни одной инструкции. Можно , просто все зависит от ситуации , в теории по написанию таких дебагов есть замечание о таких случаях и там предусматривается это ![]() ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 24 июля 2009 13:44 · Личное сообщение · #12 |
|
Создано: 24 июля 2009 15:39 · Личное сообщение · #13 Nowar Это стороний продукт ![]() ![]() ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube ![]() |
|
Создано: 24 июля 2009 20:54 · Поправил: Nowar · Личное сообщение · #14 У меня Simics под виндой стоит. Можно честно винду "на паузу" поставить, на несколько (100 по умолчанию) тактов назад откатить. Но, конечно, это не тот полноценный бэктрейсер, который тут обсуждается, т.к. Симикс ничего об эмулируемой системе не знает, и поэтому происходит обратная трассировка всей машины. Симикс знает, что работает в защищённом режиме, есть всякие IDT, GDT и тому подобная фигня, которую он любезно предоставляет и которую можно смотреть редактировать. Если хочется конкретный target смотреть, то его надо сначала в памяти найти. Зато Симикс позволяет бряки ставить и старфорс не понимает, что его где-то в чём-то обманывают ![]() ![]() |
![]() |
eXeL@B —› Программирование —› Back- tracing |