Поиск:

Ответ в темуСоздание новой темы Создание опроса
> странности отладчика, Turbo debugger 5.0 
:(
    Опции темы
Lonley
Дата 31.10.2005, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 7.10.2003
Где: северные ворота М урманск

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




Привет!!!
----------------
Вот тут написал не большой резидент он сохраняет экран в текством режиме в файле вместе аттрибутами
--
так вот вопрос... когда я проверял в отладчике Turbo Debugger 5.0
от Borlanda то я проверял ключевое слово что бы проверить и иключить
повторную загрузку
1. зашел в таблицу векторов прерываний что бы посмотреть свои установленные вектора
2. стал смотреть куда он ссылается значения указывали на мой обработчик
21 перерывания ... но в отладчике при трассировке он загружал другие значения
например......
вектор указывающий на 21 прерывание до загрузки резидента
7c10
a700
после загрузки резидента
1c01
f510
я просматривал память просмотровщиком памяти.. и в отладчике мотрел все эти значения есть... но при трассировке он место
1c01
f510
копировал другие значение в регистры... например
0b4a
23d3
в конце концов я решил просто запустить программу в надежде что она
сработает и о странность она сработала значит отладчик чудит что ли
----------------------
среда работы XP Proff SP1
NORTON 5.0 Rus
TS 3.0
TD 5.0
TASM 5.0
----------------------

Код

.386
IDEAL
MODEL TINY
CODESEG
ORG 100h

_start:
    jmp _init
    old_int09    dd 00
    
    old_int21_ofs    dw 0
    old_int21_seg   dw 0
    
    init        db 0
    int21_active    db 0
    
    file            db 'screen.txt',0
    
    h_fil           dw 0
    key_word    dw 0ffffh ;слово для проверки есть ли резидент в памяти
     
proc int21h
    mov cs:int21_active,1            ;21 активен
    pushf                    ;
    call dword ptr cs:[old_int21_ofs]    ;
    mov cs:int21_active,0            ;21 закончил работу
    retf 2
endp int21h
     
proc int09h
    pushf
    push ax
    push dx
    push cx
    push es
    push si
    push di
    push bx        
    push ds
;#############################################################################    
_beg:    
    in al,60h    ;зЁв Ґ¬ Ё§ Ї®ав  бЄ ­ Є®¤ Є« ўЁиЁ
    jmp e        ;§ ¤Ґа¦Є  ¤«п ба Ў влў ­Ёп  ЇЇ а вгал
e:    cmp al,41    ;Ґв® `~ ??
    jz _yes_    ;¤ 
    jmp _restore    ;­Ґв
_yes_:            ;
    mov ax,0040h    ;
    mov es,ax    ;
_e:            ;
    mov al,byte ptr es:[018h]    ;зЁв Ґ¬ б«®ў® б®бв®п­ЁҐ Є« ў
    test al,0000001b        ;ctrl «Ґў п ­ ¦ в 
    jnz _end            ;¤ 
    jmp _restore            ;­Ґв
_end:    
;#############################################################################
    cmp cs:int21_active,1    ;ў¤а㣠㦥 ЇаҐалў ­ЁҐ ўлЇ®«­пҐвбп
    je _yes            ;¤  ----------->
    mov ax,cs    ;
    mov ds,ax    ;
            ;
    mov ah,3ch    ;б®§¤ ¤Ё¬ д ©«
    xor cx,cx    ;®Ўлз­л© д ©«
    lea dx,cs:file    ;в ¬ Ё¬п
    int 21h        ;----------->
            ;
    mov ah,3dh    ;®вЄа®Ґ¬ д ©«
    mov al,02h    ;¤«п § ЇЁбЁ
    lea dx,cs:file    ;в ¬ Ё¬п д ©« 
    int 21h        ;----------->
    mov cs:h_fil,ax    ;б®еа ­Ё¬ ¤ҐбЄаЁЇв®а
    
    mov ax,0b800h    ; ¤аҐб ўЁ¤Ґ®Ї ¬пвЁ ў вҐЄбв®ў®¬ аҐ¦Ё¬Ґ 03
    mov ds,ax    ;ᥣ¬Ґ­в DS ­  ўЁ¤Ґ®Ї ¬пвм
    xor dx,dx    ;®в ­ з «  ўЁ¤Ґ®Ї ¬пвЁ

    mov bx,cs:h_fil    ;¤ҐбЄаЁЇв®а д ©« 
    mov ah,40h    ;дг­ЄжЁп § ЇЁбЁ
    mov cx,4000    ;4000 Ў ©в
    int 21h        ;ЇЁиҐ¬   --->  ў¬Ґб⥠ᠠвваЁЎгв ¬Ё
    
    mov ah,3eh
    mov bx,cs:h_fil
    int 21h    
    
_yes:

;#############################################################################
_restore:
    pop ds
    pop bx
    pop di    ;ў® -
    pop si    ;бв -
    pop es    ; ­ -
    pop cx    ; ў -
    pop dx    ;«Ё -
    pop ax    ;ў Ґ¬ аҐЈЁбвал
    popf    ;Ё д« ЈЁ
    jmp dword ptr cs:[old_int09]    ;ЇҐаҐе®¤ ­  бв ал© ®Ўа Ў®взЁЄ
endp int09h                ;
                        ;
_init:    
    cli                    ;
    xor eax,eax
    mov es,ax
    
    mov si,es:[84h]        ;вот тут в отладчике он получал не те значения 
                ;которые были в памяти табл вектор прерывания
    mov ax,es:[86h]        ;
    mov es,ax        ;
    mov ax,word ptr es:[si-2];читаем наше слово
    cmp ax,0ffffh        ;если это оно то
    je _res_loadet        ;ничего не делаем

    
    xor eax,eax                ;
    mov es,ax                ;

    mov eax,dword ptr es:[09h*4]        ;
    mov old_int09,eax            ;
;-----------------------------------------------------------------
    mov ax,es:[21h*4]
    mov old_int21_ofs,ax
    mov ax,es:[21h*4+2]
    mov old_int21_seg,ax
;-----------------------------------------------------------------
    mov word ptr es:[09h*4],offset int09h    ;
    mov ax,cs                ;
    mov word ptr es:[09h*4+2],ax
;-----------------------------------------------------------------
    mov word ptr es:[21h*4],offset int21h
    mov word ptr es:[21h*4+2],ax
    
    sti                    ;
    lea dx,str_help
    mov ah,09h
    int 21h
    
    lea dx,_init                ;
    int 27h                    ;
_res_loadet:
    
    lea dx,res_l
    mov ah,09h
    int 21h
    
    mov ax,4c00h
    int 21h
    
;##########################################################################
; AREA DATA No REZIDENT

    str_help    db 'Press Ctrl + ~ save screen to file screen.txt',10,13
            db '(c) copyright Lonley 2005',10,13
            db '[email protected]','$'
            
    res_l        db 'Resident loadet','$'

end _start





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

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

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


 




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


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

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