проблема с подменой прерывания =(

Тема в разделе "WASM.NT.KERNEL", создана пользователем erzik, 5 янв 2007.

  1. erzik

    erzik New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6
    есть две программы:
    - первая делает подмену прерывания 20h, ждет нажатия кнопки, проверяет работу подмененного прерывания и восстанавливает это прерывание, после чего завершается int 20h
    - вторая прога содержит сначала int 20h, а потом ожидание нажатия клавиши

    теперь в чем проблема:
    в одном досовском окошке запускаю первую прогу, когда прерывание заменяется, запускаю в другом окошке вторую прогу и вот тут непонятки! почему вторая прога завершается не требуя нажатия клавиши? ведь прерывание подменено!

    выкладываю коды, чтоб понятнее было:
    ---------------------- прога номер 1----------------------------
    org 100h

    cli ;подмена прерывания
    push ax
    push es
    xor ax,ax
    mov es,ax
    mov ax,[es:20h*4]
    mov [cs:int_old],ax
    mov ax,[es:20h*4+2]
    mov [cs:int_old2],ax
    mov ax,int_new
    mov [es:20h*4],ax
    mov [es:20h*4+2],cs
    pop es
    pop ax
    sti

    mov ax,10h ;проверка того, что прерывание подменено
    int 16h ;и тут все как надо
    mov ax,0
    int 20h
    int 16h

    cli ;восстановка прерывания
    push ax
    push es
    xor ax,ax
    mov es,ax
    mov ax,[cs:int_old]
    mov [es:20h*4],ax
    mov ax,[cs:int_old2]
    mov [es:20h*4+2],ax
    pop es
    pop ax
    sti


    mov ax,10h ;завершение проги
    int 16h
    int 20h


    int_new: ;само прерывание (новое)
    mov ax,10h
    iret

    int_old dw 0
    int_old2 dw 0
    symbol db ' $'

    -------------------------прога номер 2-------------------------
    org 100h

    int 20h ;прога завершается как всегда, как будто
    mov ah,10 ;прерывание не подменяли
    int 16h




    писал все на NASM. подскажите, как сделать, чтобы прерывание подменивалось нормально для всей винды, а не для одного окошка и как это объяснить...
     
  2. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    винда и 16-битный ассемблер? что-то я ничего не понял =/
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Потому что в винде каждой ДОС проге выделяется своя ДОС сессия (типа собственная персональная ДОС ;)) и на другие проги она никак повлиять не может. Чтобы работало в винде используй виндовую модель flat и API сервисы :)
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    но даже в досе чтоб запустить 2ую прогу, тебе первую надо оставить резидентом в памяти.