трассировка

Discussion in 'WASM.BEGINNERS' started by test896, Apr 10, 2009.

  1. test896

    test896 New Member

    Blog Posts:
    0
    Joined:
    Apr 8, 2009
    Messages:
    132
    Все привет!
    Знатоки!
    Каков алгоритм трассировки прерывания?
    зб спасибо
     
  2. SashaTalakin

    SashaTalakin New Member

    Blog Posts:
    0
    Joined:
    Dec 15, 2008
    Messages:
    261
    если это не трассировка первого прерывания, то такой же как трассировки всего прочего
     
  3. SashaTalakin

    SashaTalakin New Member

    Blog Posts:
    0
    Joined:
    Dec 15, 2008
    Messages:
    261
    Ну вообще вопрос странно поставлен по-моему, может по-развернутей как-нибудь?
     
  4. test896

    test896 New Member

    Blog Posts:
    0
    Joined:
    Apr 8, 2009
    Messages:
    132
    ну например int 21h, многие программы перехватывают его, и вирусы тоже, как мне в моей программе пройтись до оригинального обработчика прерывания?
     
  5. PSR1257

    PSR1257 New Member

    Blog Posts:
    0
    Joined:
    Nov 30, 2008
    Messages:
    933
    SashaTalakin
    Как насчот клавиатурного? :derisive: --joke
    Или это про сплайсенг?

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

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

    test896 New Member

    Blog Posts:
    0
    Joined:
    Apr 8, 2009
    Messages:
    132
    а на Win мне рано замахиваться (мало знаний как он устроен), я про DOS.
     
  7. SashaTalakin

    SashaTalakin New Member

    Blog Posts:
    0
    Joined:
    Dec 15, 2008
    Messages:
    261
    Эм не знаю причем тут трассировка. Наверно зависит от того каким образом это прерывание перехвачено. Но ни по вирусам ни по досу я не спец увы.
     
  8. PSR1257

    PSR1257 New Member

    Blog Posts:
    0
    Joined:
    Nov 30, 2008
    Messages:
    933
    Да там в-основном про DOS.

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

    test896 New Member

    Blog Posts:
    0
    Joined:
    Apr 8, 2009
    Messages:
    132
    вообщем нужно писать разборщик кодов ассемблера , и анализировать идя по ним , так понимаю, другого не дано?
     
  10. PSR1257

    PSR1257 New Member

    Blog Posts:
    0
    Joined:
    Nov 30, 2008
    Messages:
    933
    Это смотря что тебе нужно. В первом приближении нет, только анализ байтов или значение cs в стеке.
     
  11. SashaTalakin

    SashaTalakin New Member

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

    test896 New Member

    Blog Posts:
    0
    Joined:
    Apr 8, 2009
    Messages:
    132
    хотел программу написать чтобы определенное прерывание трассировала, выводила адреса по котором она проходит,
    а вообще нарабатываем руку на новую для себя тему
     
  13. SashaTalakin

    SashaTalakin New Member

    Blog Posts:
    0
    Joined:
    Dec 15, 2008
    Messages:
    261
    PSR1257
    А как в досе использовать int1, там же реальный режим? Самому интересно.

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

    test896 New Member

    Blog Posts:
    0
    Joined:
    Apr 8, 2009
    Messages:
    132
    попробуем, а разве Винда с прерываниями работает?
    мож она через драйверы, а драйверы через порты
     
  15. SashaTalakin

    SashaTalakin New Member

    Blog Posts:
    0
    Joined:
    Dec 15, 2008
    Messages:
    261
    Пока без прерываний думаю никто не научился работать :)
     
  16. PSR1257

    PSR1257 New Member

    Blog Posts:
    0
    Joined:
    Nov 30, 2008
    Messages:
    933
    Это смотря на каком уровне в винде. Если в 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 но лучша мучать самому.