трассировка

Тема в разделе "WASM.BEGINNERS", создана пользователем test896, 10 апр 2009.

  1. test896

    test896 New Member

    Публикаций:
    0
    Все привет!
    Знатоки!
    Каков алгоритм трассировки прерывания?
    зб спасибо
     
  2. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    если это не трассировка первого прерывания, то такой же как трассировки всего прочего
     
  3. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Ну вообще вопрос странно поставлен по-моему, может по-развернутей как-нибудь?
     
  4. test896

    test896 New Member

    Публикаций:
    0
    ну например int 21h, многие программы перехватывают его, и вирусы тоже, как мне в моей программе пройтись до оригинального обработчика прерывания?
     
  5. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    SashaTalakin
    Как насчот клавиатурного? :derisive: --joke
    Или это про сплайсенг?

    ... да, почти про сплайсенг. Смотри журналы IV на vx.netlux.org

    А вообще вроде int 1 и контроль сегментов.
     
  6. test896

    test896 New Member

    Публикаций:
    0
    а на Win мне рано замахиваться (мало знаний как он устроен), я про DOS.
     
  7. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Эм не знаю причем тут трассировка. Наверно зависит от того каким образом это прерывание перехвачено. Но ни по вирусам ни по досу я не спец увы.
     
  8. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Да там в-основном про DOS.

    Вроде бы так: (в win не намного сложнее) устанавливаешь свой int 1 и трассируешь int 21h с какой-нить левой функцией чтобы управление попало в первичный обработчик без проблем - и каждый раз контролируешь где выполняется текущая инструкция - тут я могу предложить анализ сегмента кода (если перехватчик сидит в выделенном блоке памяти или еще где), или типа масочного анализа типа "стандарнтый обработчки DOS таких-то версий имеет команду cmp ah,42h и еще через 8 байт команду xchg ax,bx".
     
  9. test896

    test896 New Member

    Публикаций:
    0
    вообщем нужно писать разборщик кодов ассемблера , и анализировать идя по ним , так понимаю, другого не дано?
     
  10. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Это смотря что тебе нужно. В первом приближении нет, только анализ байтов или значение cs в стеке.
     
  11. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    test896
    а цель-то какая? Просто посмотреть где успевает побывать управление? или найти оригинальный обработчик? Или что. И пишется ли программа, или просто выполняется такая задача вручную неясно
     
  12. test896

    test896 New Member

    Публикаций:
    0
    хотел программу написать чтобы определенное прерывание трассировала, выводила адреса по котором она проходит,
    а вообще нарабатываем руку на новую для себя тему
     
  13. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    PSR1257
    А как в досе использовать int1, там же реальный режим? Самому интересно.

    В windows и любой другой ОС в protected mode можно перехватить int1 через idt или через какие-то внутрренние функции ОС, которые дергаются после вызова int1. Каждый раз когда будет происходить прерывание на стеке процессор будет размещать cs и eip. И еще некоторые msr регистры загружает с доп. информацией. Потом придется как-то перехватить еще интересующее прерывание, чтобы взвести TF перед началом обработки, а перед выполнением iret'а сбросить.
    Так что там все просто, а вот в дос не знаю
     
  14. test896

    test896 New Member

    Публикаций:
    0
    попробуем, а разве Винда с прерываниями работает?
    мож она через драйверы, а драйверы через порты
     
  15. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Пока без прерываний думаю никто не научился работать :)
     
  16. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Это смотря на каком уровне в винде. Если в ring3, так установи свой SEH, перед выполнимым кодом сделай исключение и в SEH поставишь флаг трассировки и вернешь управление трассируемому коду.

    В RM (DOS) (или в DOS-box - V86) все примерно то же - та же таблица прерываний, немного адресация другая (16 бит) а так примерно то же самое.

    Если нужно трассировать и в лог то скорее всего придется делать лог в буфер а потом уже в файл, потому чта если ты трассируешь DOS то вызывать его (не зная оригинального обработчего) немного сложна.

    Напиши сначала маленький com прог и потренируйсо на кисках - потрассируй свой код. Если все будет работать, можно начинать int 21h, но тут будет не сразу потому что если ты уронишь int 21h то это будет означать reboot. Потрассируй первые несколько команд для тренировки и потом аккуратно отпусти его. Смотреть на DOS можно в td (turbo debugger) или любом другом. Одновременно свой int 1h и td юзать нельзя, можно попробовать Sice для DOS но лучша мучать самому.