Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot, Rio (+5 невидимых)

 eXeL@B —› Программирование —› Back- tracing
Посл.ответ Сообщение


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 05 июня 2009 00:07 · Поправил: mak
· Личное сообщение · #1

ктонибудь занимался чем то подобным? Есь некоторые мысли , но в плане реализации пока обдумывается. Back- tracing в данном случае должен висеть не на отладчике ... вообщем можно назвать и отладчиком но это скорее трасер просто , причем реализованный нестандартно. Клоню к тому что моменты связанные с привязкой к определнным архитектурам отладки по возможности хочется избежать.

Также требуется 2 метода бэктраса , первый это просто трасинг назад с изменением регистров и стэка , второй метод , более особый , возможно даже расширение первого , это отслеживание изменений в самой программе , ее кода , данных и так далее. Задача сложна ...есть много ньюансов , но на первых парах , бэк второго типа предназначен пока для легкого кода ... Также было бы хорошо чтобы задавать границы бэк траса ..то есть скажем историю возврата ...полная , или по выбранному размеру.

Теоретически это все должно быть в дровине. Сложность в нестандартной реализации процеса трасинга.

Волнует также момент , когда нет особого контроля за программой , она выполняется как бы в режиме ран , но при этом основные брэйки стоят на месте. Могу ли я как то неявно контролировать трассу в методе запуска РАН. в принцыпе наверное это возможно. Но Олидебуг , это не выполняет например, режим ран просто , и истории просто нету бэктраса.

Вот такие мелочи было бы классно обсудить Кто в теме ? признавайтесь

P.S. Забыл сказать , еще интересно оптимизация процесса , например скажем построение дерева с архивными структурами , но в данном случае уже интерес представляет компактная имплементация. Также хочется заметить что часть кода может выполнятся выборочно на вм тачке ...поэтому наверное надо и это учесть , хоть и на вм проще наверное контролировать заднюю трасировку. Но не весь код будет проэмулирован.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 05 июня 2009 00:53
· Личное сообщение · #2

Предложения
mak пишет:
Клоню к тому что моменты связанные с привязкой к определнным архитектурам отладки по возможности хочется избежать.

и
mak пишет:
Теоретически это все должно быть в дровине

противоречат друг-другу. Драйвер - это как раз полнейшая привязка к архитектуре.

Хочешь без привязки к архитектуре - делай эмулятор выполнения кода с записью всех изменений.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 05 июня 2009 13:50
· Личное сообщение · #3

Под архитектурой отладки имеется ввиду , метод реализации отладочного процесса. Поэтому противоречий не вижу И про эмулятор написано ... полный эмуль делать не надо и на то есть мотивы. Вобщем ближе к теме ... если не понятно , то читать еще раз , написал я все верно и правильно Надоедает немного разжевывать то что спросил ... не в обиду , просто времени в обрез , и тратить на разьяснение вопроса много сил и времени как в каждом топе не хочется.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 05 июня 2009 18:06
· Личное сообщение · #4

простейший вариант - это собственный двиг, полностью подменяющий Debug API - тогда можешь использовать в качестве интерфейса любой отладчик, основанный на Debug API

-----
EnJoy!




Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 05 июня 2009 18:14
· Личное сообщение · #5

и как ты сделаешь бектрейс после какого-нибудь вызова API, к примеру RegisterClass. имхо очередной топ в котором через 20 постов тс напишет что все ламеры можно закрывать.

-----
Shalom ebanats!





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 05 июня 2009 18:32
· Личное сообщение · #6

вызовы апи мона пропускать, записывая тока контекст до и после

-----
EnJoy!




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 05 июня 2009 18:50
· Личное сообщение · #7

Идея интересная.

Jupiter пишет:
вызовы апи мона пропускать,

Ещё б всякие циклы пропускать или упрощать до формул, научиться отрубать не слишком важные процедуры (или сворачивать), и строить потом граф или блок-схему

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 05 июня 2009 18:58
· Личное сообщение · #8

ну кста примитивный цикл с инкрементом счётчика (ecx, к примеру) можно просчитать достаточно быстро
а вот более-менее сложные циклы пропускать - тока если в них нет прыгов за пределы цикла

-----
EnJoy!





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 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




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 05 июня 2009 21:24
· Личное сообщение · #10

Трассировать каждую инструкцию и сохранять полный контекст потока и стек в пределах +/- 800 байт. Многа очень памяти нужно. Потом можно и назад пройти, посмотрев состояние процессора на момент каждой инструкции. Иначе ничего не будет, просто стековые фреймы развернуть гдето внутри процедуры не надёжно и не эффективно. Хотя протрассировать тоже проблема большая. Пропускать ничего нельзя, ни одной инструкции.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 24 июля 2009 13:30
· Личное сообщение · #11

Как можно отследить память процесса , ее изменения в выделенном процессе, чтобы строить потом карту изменений памяти процесса. Хукать апи работы с памятью , но это не идеальный вариант. Нужно что то вроде Мемори процесс Монитор. Можно ли это сделать из ядра какнибудь , просто и эффективно ? Вообще рассмотрел бы два варианта как из р3 так и из р0 , но на будущее р0 конечно должен быть ...


Clerk пишет:
Пропускать ничего нельзя, ни одной инструкции.


Можно , просто все зависит от ситуации , в теории по написанию таких дебагов есть замечание о таких случаях и там предусматривается это

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 24 июля 2009 13:44
· Личное сообщение · #12

А почему не использовать simics? Чем не бэктрэйсер?




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 24 июля 2009 15:39
· Личное сообщение · #13

Nowar Это стороний продукт , речь идет о реализации. Также Симикс как мне известно распостраняется только под линукс. Выше еще писал что полная виртуализация это не сложно но обьемно , лучше использовать частичную виртуализацию. В бэктрэсе не обязательно иметь вообще виртуализацию. Есть также с таким подходом под линукс бэктрасер на си , называется Лизард

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 24 июля 2009 20:54 · Поправил: Nowar
· Личное сообщение · #14

У меня Simics под виндой стоит. Можно честно винду "на паузу" поставить, на несколько (100 по умолчанию) тактов назад откатить.
Но, конечно, это не тот полноценный бэктрейсер, который тут обсуждается, т.к. Симикс ничего об эмулируемой системе не знает, и поэтому происходит обратная трассировка всей машины. Симикс знает, что работает в защищённом режиме, есть всякие IDT, GDT и тому подобная фигня, которую он любезно предоставляет и которую можно смотреть редактировать. Если хочется конкретный target смотреть, то его надо сначала в памяти найти. Зато Симикс позволяет бряки ставить и старфорс не понимает, что его где-то в чём-то обманывают


 eXeL@B —› Программирование —› Back- tracing
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати