ну например int 21h, многие программы перехватывают его, и вирусы тоже, как мне в моей программе пройтись до оригинального обработчика прерывания?
SashaTalakin Как насчот клавиатурного? --joke Или это про сплайсенг? ... да, почти про сплайсенг. Смотри журналы IV на vx.netlux.org А вообще вроде int 1 и контроль сегментов.
Эм не знаю причем тут трассировка. Наверно зависит от того каким образом это прерывание перехвачено. Но ни по вирусам ни по досу я не спец увы.
Да там в-основном про DOS. Вроде бы так: (в win не намного сложнее) устанавливаешь свой int 1 и трассируешь int 21h с какой-нить левой функцией чтобы управление попало в первичный обработчик без проблем - и каждый раз контролируешь где выполняется текущая инструкция - тут я могу предложить анализ сегмента кода (если перехватчик сидит в выделенном блоке памяти или еще где), или типа масочного анализа типа "стандарнтый обработчки DOS таких-то версий имеет команду cmp ah,42h и еще через 8 байт команду xchg ax,bx".
вообщем нужно писать разборщик кодов ассемблера , и анализировать идя по ним , так понимаю, другого не дано?
test896 а цель-то какая? Просто посмотреть где успевает побывать управление? или найти оригинальный обработчик? Или что. И пишется ли программа, или просто выполняется такая задача вручную неясно
хотел программу написать чтобы определенное прерывание трассировала, выводила адреса по котором она проходит, а вообще нарабатываем руку на новую для себя тему
PSR1257 А как в досе использовать int1, там же реальный режим? Самому интересно. В windows и любой другой ОС в protected mode можно перехватить int1 через idt или через какие-то внутрренние функции ОС, которые дергаются после вызова int1. Каждый раз когда будет происходить прерывание на стеке процессор будет размещать cs и eip. И еще некоторые msr регистры загружает с доп. информацией. Потом придется как-то перехватить еще интересующее прерывание, чтобы взвести TF перед началом обработки, а перед выполнением iret'а сбросить. Так что там все просто, а вот в дос не знаю
Это смотря на каком уровне в винде. Если в 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 но лучша мучать самому.