Абсолютно полный лог испольнения программы

Тема в разделе "WASM.RESEARCH", создана пользователем Son of God, 30 май 2006.

  1. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Нужен логгер, который записывает абсолютно всю информацию об исполнении процесса и потом предоставляет ее в удобоваримой графической форме. Выбираешь диапазон памяти, а логгер потом выполняет инструкции по одной и после каждой инструкции запоминает саму инструкцию, содержимое изменяемых регистров и содержимое изменяемых байтов из диапазона памяти. После создания лога можно просматривать историю изменения каждого байта, т.е. когда, откуда скопировался, с чем был поксорен, куда и кем был записан пойнтер на этот байт, сколько раз был прочитан и изменен, на выполнение какого участка кода повлиял, какие инструкции и в какой момент времени читали или изменяли байт. Кто-нибудь встречал такую прогу?
     
  2. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    SoftICE + Memory Dump :)
     
  3. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    Трейсер на основе любой подходящей (по уровню антиотладки) технологии, плюс аппаратные точки останова на нужные байты, там где надо - PAGE_NOACCESS для областей памяти.

    Остальное - анализ окресностей кода зацепившего соответствующее исключение. Для некоторых кусков кода - вполне будет работать. Чтобы работало для всех - надо писать свою виртуальную машину и эмулировать все инструкции, включая и ОС, самому...
     
  4. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Son of God

    ну ты и загнул конечно:)

    Это всё равно что полный лог жизни какого-нибудь чувака вести.
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    лог может быть размером с несколько гиг, обработаешь?
     
  6. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Да куда больше может быть. Потому я и сравнил с видеозаписью человеческой жизни.
     
  7. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Большой размер лога - не беда. Просмотрщик должен иметь много разных фильтров, чтобы не потеряться в куче информации. Например, можно выбрать 2 куска по 10 байтов памяти, в которую вводятся имя и серийник, и просмотреть исчерпывающую информацию о том, что программа делала с ними и что они делали с программой.
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    можно выбрать 2 куска по 10 байтов памяти, в которую вводятся имя и серийник



    Если тебе только это нужно, нафиг огород городить с суперлогами и их суперпросмотрщиками?
     
  9. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Ну это мне сейчас только это нужно, а завтра мне что-нибудь более сложное понадобится. Хотелось бы иметь универсальный инструмент для изучения работы программ.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Son of God

    Когда тебе понадобится съездить в магазин, ты же не будешь искать perpetuum mobile :)
     
  11. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Son of God



    Да встречал - собственноручно написанный отладчик. Но он работает только на моей машине(Pentium 3 + не APIC), поскольку решаемые вопросы специфичны к конкретной аппаратуре.



    Т.о. если позволяет уровнь знаний - пиши совой, а если необходимо только изменить денежную сумму, или очки опыта в игре, то вполне сойдет и Art Money помоему это так называется.
     
  12. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    Perpetuum Mobile существует!:)



    Буду писать свой логгер.
     
  13. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Хотелось бы иметь универсальный инструмент для изучения работы программ.



    Это не возможно ...



    Универсальность это миф !!!



    Всегда выплывает задача которая не зезет в заданные рамки.
     
  14. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    При любой системе аксиом и правилах вывода всегда найдутся утверждения, истинность или ложность которых нельзя доказать в рамках данной системы. Типичный пример - парадокс Бертрана-Рассела. Или доказательство невозможности построения универсальной машины Тьюринга.
     
  15. The_Lord_Impaler

    The_Lord_Impaler New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    3
    Адрес:
    Russia
    А почему бы нет ? Та же трассировка, только в "пассивном режиме". Последовательно трейсит код - изменило регистр\флаг - в лог. Встретилось обращение к памяти - кусок дампа в лог. Как специализированная утилита для небольших программ - вполне осуществимая реальность.
     
  16. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Son of God



    В Ollydbg есть трейсер - в нем не хватает только логгера памяти.
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    в SoftICE под 9х был trace simulation mode.

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



    Дебаггер IDA умеет делать лог исполнения.



    Но всё это, конечно, не в тех масштабах, что тебе нужно.



    Кстати, Pentium4 имеет аппаратные средства для записи лога исполнения, может пригодится для твоего логгера.

    См. "Branch Trace Store (BTS)" в Интеловском мануале.
     
  18. dm7

    dm7 New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2006
    Сообщения:
    1
    Я тут делаю кое-что в этом плане для Windows двумя разными способами, используя Branch Trace Store и динамическую двоичную трансляцию.

    С BTS можно определить только какие инструкции были исполнены (без адресов данных и самих данных). При этом ещё нужно чтобы код был неизменяемым – записываются только адреса кода. Несмотря на аппаратную поддержку тормозит довольно сильно. Зато сразу и kernel трассируется и без особых усилий.

    Второй способ позволяет получить всю информацию об исполнении. Исполняется не сам код, а его динамически созданная копия (a la Crusoe), которая сохраняет что нужно. Реально в файл записывается только небольшая часть данных считанных из памяти, остальное восстанавливается повторным исполнением кода из trace-файла. Это позволяет существенно уменьшить trace-файл. Скорость исполнения снижается в 10-50 раз. Пока что не все проблемы решены, например прерывания на границе инструкций. Да и не все инструкции реализованы.

    Могу дать screenshot'ы, но мне некуда их выложить. С практическим использованием пока никак, но BTS версию можно доделать в относительно короткие сроки, я использую её для отладки второго варианта и некоторых исследований ядра.

    Можно использовать Int 1, но это будет ещё медленнее (особенно при использовании отладочного API – OllyDbg трассирует только где-то около 5000 инструкций в секунду) и придётся сохранять гораздо больше информации.