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

Discussion in 'WASM.ASSEMBLER' started by tower120, May 21, 2007.

  1. tower120

    tower120 New Member

    Blog Posts:
    0
    Здраствуйте! Это опять я со своими глупыми вопросами...

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

    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

    Blog Posts:
    0
    При установке обработчика прерывания в dx помещается смещение, а в ds - сегмент обработчика. Про сегмент ты забыл.
     
  3. tower120

    tower120 New Member

    Blog Posts:
    0
    Что ты имееш ввиду? А как же:
    MOV AX,DATA
    MOV DS,AX
     
  4. Otebebe

    Otebebe New Member

    Blog Posts:
    0
    Alarm находится к кодовом сегменте.
    Поэтому необходимо перед
    Code (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 Владимир

    Blog Posts:
    0
    Пишите лучше комки, чтобы меньше проблем было. Всё равно код+данные не получится больше 64К (пока:)
     
  6. tower120

    tower120 New Member

    Blog Posts:
    0
    Объясните дураку что делают эти строчки. Мы что в DS содержимое CS записываем?
     
  7. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    tower120
    Да. С сохранением старого содержимого DS в стеке
     
  8. tower120

    tower120 New Member

    Blog Posts:
    0
    Пардон господа, может я что-то не понимаю, но не проще ли mov ds,cs ?
     
  9. Quantum

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

    Blog Posts:
    0
    tower120
    Нет такой инструкции.
     
  10. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    tower120
    Конечно проще :), но есть одна "мелочь" - интел забыла зарелизить такую команду ;)
     
  11. Slavic

    Slavic New Member

    Blog Posts:
    0
    Такое не откомпилируется - системой команд не предусмотрено
     
  12. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    посмотри в юрове структуру опкодов и пойми, что такой команды в природе нет.
     
  13. Y_Mur

    Y_Mur Active Member

    Blog Posts:
    0
    offtop
    {
    Какой у наc дружный хор получился :)
    }
     
  14. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Y_Mur
    давайте по второму разу :P
     
  15. EvilsInterrupt

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

    Blog Posts:
    0
    А можешь не мудрить! ты же шаришь, что адрес обработчика прерывания лежит в таблице векторов! А она в 1024 байтах начальных, адрес обратотчика есть номер обработчика умножить на что? ))) Вот и меняй напрямую, этот трюк давно забытый, но в "Как написать вирус?" от И.Коваля там все это есть.
     
  16. tower120

    tower120 New Member

    Blog Posts:
    0
    Вобщем понял, можно и мувами, только с умом :)
     
  17. EvilsInterrupt

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

    Blog Posts:
    0
    Нет, ну зачем так сразу человека расстраивать? Пусть бы посидел, помучился, там глядишь может проц и выполнил бы такую команду?! ))))
     
  18. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    EvilsInterrupt
    Ну да, только сначала пришлось бы долго плясать с бубном, чтобы компилятор ее хотя бы откомпилировал :)
     
  19. EvilsInterrupt

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

    Blog Posts:
    0
    Great
    А че ему компилить то?
    сформировать походу а-ля db 0xХреновый_байт_опкода_раз, 0xХреновый_байт_опкода_два и так будет с каждым! - (c) Альтов )))
     
  20. Ustus

    Ustus New Member

    Blog Posts:
    0
    Есть такая команда!!!
    Ее код:
    50 8C C8 8E D8 58
    :):):)

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