Замена прерываний

Тема в разделе "WASM.ASSEMBLER", создана пользователем tower120, 21 май 2007.

  1. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Здраствуйте! Это опять я со своими глупыми вопросами...

    Пытаюсь установить своё прерывание:

    DATA SEGMENT
    ......
    ......
    DATA ENDS

    STK SEGMENT STACK ;ñåãìåíò ñòåêà
    DB 128 DUP(?)
    STK ENDS

    CODE SEGMENT ;ñåãìåíò êîäà
    ASSUME DS:lol: ATA,CS:CODE,SS:STK; ñâÿçóåì ðåãèñòðû ñ ñåãìåíòàìè

    Alarm Proc
    lea dx,Message1
    mov ah,09h
    int 21h

    xor ax,ax
    int 16h

    iret
    Alarm ENDP


    START:
    MOV AX,DATA ;çàãðóæàåì â DS íà÷àëüíûé àäðåñ DATA
    MOV DS,AX

    mov ah,25h
    mov al,99h
    lea dx,Alarm
    int 21h


    int 99h
    MOV AX,4C00H
    INT 21H
    CODE ENDS
    END START

    Когда пытается выполнить int 99h NTVDM начинает ругаться. Стоит у меня Виста, на ХР тоже самое было.
     
  2. Slavic

    Slavic New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    14
    При установке обработчика прерывания в dx помещается смещение, а в ds - сегмент обработчика. Про сегмент ты забыл.
     
  3. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Что ты имееш ввиду? А как же:
    MOV AX,DATA
    MOV DS,AX
     
  4. Otebebe

    Otebebe New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2006
    Сообщения:
    91
    Alarm находится к кодовом сегменте.
    Поэтому необходимо перед
    Код (Text):
    1.   mov ah,25h
    2.   mov al,99h
    3.   lea dx,Alarm
    4.   int 21h
    выполнить
    push DS
    push CS
    pop DS
    чтобы DS:lol: X-указывали на Аlarm.
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Пишите лучше комки, чтобы меньше проблем было. Всё равно код+данные не получится больше 64К (пока:)
     
  6. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Объясните дураку что делают эти строчки. Мы что в DS содержимое CS записываем?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    tower120
    Да. С сохранением старого содержимого DS в стеке
     
  8. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Пардон господа, может я что-то не понимаю, но не проще ли mov ds,cs ?
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    tower120
    Нет такой инструкции.
     
  10. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    tower120
    Конечно проще :), но есть одна "мелочь" - интел забыла зарелизить такую команду ;)
     
  11. Slavic

    Slavic New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    14
    Такое не откомпилируется - системой команд не предусмотрено
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    посмотри в юрове структуру опкодов и пойми, что такой команды в природе нет.
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    offtop
    {
    Какой у наc дружный хор получился :)
    }
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Y_Mur
    давайте по второму разу :P
     
  15. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    А можешь не мудрить! ты же шаришь, что адрес обработчика прерывания лежит в таблице векторов! А она в 1024 байтах начальных, адрес обратотчика есть номер обработчика умножить на что? ))) Вот и меняй напрямую, этот трюк давно забытый, но в "Как написать вирус?" от И.Коваля там все это есть.
     
  16. tower120

    tower120 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    56
    Вобщем понял, можно и мувами, только с умом :)
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Нет, ну зачем так сразу человека расстраивать? Пусть бы посидел, помучился, там глядишь может проц и выполнил бы такую команду?! ))))
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    EvilsInterrupt
    Ну да, только сначала пришлось бы долго плясать с бубном, чтобы компилятор ее хотя бы откомпилировал :)
     
  19. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Great
    А че ему компилить то?
    сформировать походу а-ля db 0xХреновый_байт_опкода_раз, 0xХреновый_байт_опкода_два и так будет с каждым! - (c) Альтов )))
     
  20. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Есть такая команда!!!
    Ее код:
    50 8C C8 8E D8 58
    :):):)

    Ну а почему бы и нет? Ведь преобразовывали же ассемблеры еще под 8086 shl al, 2 -> 2x shl al, 1