Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Выравнивание" обработчика 21-ого прерывания, пишу резидента, есть проблемы 
:(
    Опции темы
wint
  Дата 15.6.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Доброго времени суток.

Опишу задание в целом:
Надо написать резидента, который копирует дамп памяти(параметр вводится через диалоговое окно) в файл(указан параметром в командной строке) на жесткий диск
Походу надо сделать свои обработчики 21h и 09h прерываний.

В целом есть написанный код обработчиков и инициализирующей части, но при установке нового обработчика прерывание 21h возникает пролема: Код на который "ссылается"  указатель не соответствует тому который введен в исходнике (как я понимаю проблема с выравниванием)
Ниже приведен код функции initalize и int21_handler[code=asm]

Код

initialize proc far
...
@@Not_Resident:
    mov    ax, 3509h                 ; Сохраняем адрес старого обработчика
    int    21h                             ; прерывания 09h в old_Int09h
    mov    word ptr old_int09h, bx
    mov    word ptr old_int09h+2, es

    mov    ax, 352Fh                       ; Сохраняем адрес старого обработчика
    int    21h                             ; прерывания 2Fh в old_Int2Fh
    mov    word ptr old_int2Fh, bx
    mov    word ptr old_int2Fh+2, es

    mov    ax, 3521h                       ; Сохраняем адрес старого обработчика
    int    21h                             ; прерывания 21h в old_Int21h
    mov    word ptr old_int21h, bx
    mov    word ptr old_int21h+2, es

    mov    ax, 2509h                       ; Устанавливаем новый обработчик
    mov     dx, offset int09h_handler       ; прерывания 09h
    int    21h
    mov    ax, 252Fh                       ; Устанавливаем новый обработчик
    mov     dx, offset int2Fh_handler       ; прерывания 2Fh
    int    21h
        mov    ax, 2521h                       ; Устанавливаем новый обработчик
    mov     dx, offset int21h_handler       ; прерывания 21h
    int    21h
    mov    ah, 09h            ; Выводим сообщение об успешном запуске
    mov    dx, offset Loaded_OK
    int    21h
    mov    dx, offset initialize           ; Делаем программу резидентной
    int    27h

Код

int21h_handler proc far
    pushf                                                ; Сохранить регистр флагов
    cmp     ah, 08h                                      ; Если функция лежит в диапазоне 0Bh-0FFh
    jb      @@int21h_active_setup                        ; то передаем управление старому обработчику прерывания
    cmp     ah, 0FFh                                     ; int 21h
    ja      @@int21h_active_setup
    jmp     dword ptr cs:old_int21h

@@int21h_active_setup:
    inc     byte ptr int21h_active                       ; Устанавливаем флаг активности 21h прервыания
    call    dword ptr cs:old_int21h                      ; Вызов старого обработчика (call)
    cmp     byte ptr wait_call, 1                        ; Если не установлен флаг отложенного вызова
    jne     @@exit_int21h                                ; то выйти
    cmp     byte ptr active_flag, 1                      ; Если функция уже выполняется
    je      @@exit_int21h                                ; то выйти
    
    inc     byte ptr active_flag                         ; Установить флаг выполнения функции
    call    Main                                         ; выполнить функцию
    dec     byte ptr active_flag                         ; Сбросить флаг выполнения функции
    dec     byte ptr int21h_active                       ; Сброситьт флаг активности 21h прерывания
@@exit_int21h:
    popf
    iret
old_int21h      dw   ?,?
int21h_handler endp
 
PM MAIL   Вверх
Akina
Дата 15.6.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



А в процедуре установки обработчиков у тебя DS=сегментному адресу обработчика? т.е. видимо DS=CS? или нет? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wint
Дата 15.6.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Да... Это com программа. 
PM MAIL   Вверх
Akina
Дата 15.6.2006, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Ну так бери TD и трассируйся. Сразу увидишь где напортачил. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
wint
Дата 15.6.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



Так я брал.... Смотрел.. фишка в том что там где у меня МОЙ обработчик 21-оо прерывания после компиляции TD выдает другой код... и чего делать я не в курсе 
PM MAIL   Вверх
Akina
Дата 16.6.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Зазипуй полный исходник и выложи. Погляжу. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1086 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.