Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отловить резидентом создание конкретногофайла(DOS), Отловить резидентом создание конкретного 
:(
    Опции темы
Lordolein
Дата 24.7.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

;   === Начало программы: ===
.286
CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h

Begin:
       jmp Init        ;На метку инициализации 
; === Обработчик 21h-ого прерывания ===
Int_21h_proc proc
     cmp ax,9889h
     jne Next_step
     xchg ah,al
     iret
Next_step:
     pusha        ;Сохраним регистры...
     push ds
     push es
     mov bx,ds        ;BX=DS Збережемо ds адрес файлу
     push cs        ;Настроим сегментные регистры
     push cs
     pop es
     pop ds
     cmp ah,3Ch        ;Это создание файла?
     je Create_file
     jmp short Go_21h    ;Если другое, то передадим управление 21h-ому... 

Create_file:
 call StrCompare           ;Если убрать эту и две следующие строчки - то программа пишет о всех создаваемых файлах , а нужно только с известным именем
     jb Go_
     jg Go_
     mov si,offset Create_filemess
     call Move_string
 Go_:
     jmp short Go_21h
;=== StrCompare  ===
 StrCompare proc
    push ds
    push ax
    push di
    push si
    mov di,offset File_name_in
    mov ds,bx   ;DS указывает на сегмент, где находится имя файла (так прочитал в доке)
    mov si,dx   ;SI - на смещение
     cld
 @@10:
    lodsb
    scasb
    jne @@20
    or al,al
  jne @@10
 @@20:
  pop si
  pop di
  pop ax
  pop ds
    ret
File_name_in db 'C:\in.txt',0  ;Наш in-файл
 StrCompare endp



   Если не сравнивать имена создаваемых файлов с эталоном то все работает
Помогите найти ошибку , спасибо .
PM MAIL   Вверх
dumb
Дата 24.7.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Lordolein @  24.7.2007,  19:50 Найти цитируемый пост)
Помогите найти ошибку , спасибо . 

выложи полностью код, а не этот огрызок.
PM MAIL   Вверх
Lordolein
Дата 24.7.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот полностью код
Код

;   RESID19.ASM - программа к Главе № 19
; (С) Авторские права на файлы-приложения принадлежат автору книги
; "Ассемблер? Это просто! Учимся программировать под MS-DOS"
; Автор: Калашников Олег Александрович (e-mail: [email protected])
;     http://www.Kalashnikoff.ru

; --- Ассемблирование (получение *.com файла) ---
;При использовании MASM 6.11 - 6.13:
;ML.EXE resid19.asm /AT

;При использовании TASM:
;TASM.EXE resid19.asm
;TLINK.EXE resid19.obj /t/x


;   === Начало программы: ===
.286
CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h

Begin:
       jmp Init        ;На метку инициализации 

; === Обработчик 21h-ого прерывания ===
Int_21h_proc proc
     cmp ax,9889h
     jne Next_step

     xchg ah,al
     iret

Next_step:
     pusha        ;Сохраним регистры...
     push ds
     push es

     mov bx,ds        ;BX=DS Збережемо ds адрес файлу

     push cs        ;Настроим сегментные регистры
     push cs
     pop es
     pop ds

     cmp ax,4B00h    ;Это запуск файла на выполнение?
     je Start_f

     cmp ah,39h        ;Это создание каталога?
     je Create_dir

     cmp ah,3Ah        ;Это удаление каталога?
     je Delete_dir

     cmp ah,3Bh        ;Это смена каталога?
     je Change_dir

     cmp ah,3Ch        ;Это создание файла?
     je Create_file

     cmp ax,3D02h    ;Это открытие файла для чтения/записи?
     je Open_fl

     cmp ah,41h        ;Это удаление файла?
     je Delete_file

     jmp short Go_21h    ;Если другое, то передадим управление 21h-ому... 

Start_f:
     mov si,offset Start_filemess ;Строка для записи в наш log-файл.
     call Move_string    ;Готовим строку и записываем ее в файл...
     jmp short Go_21h    ;Передадим управление 21h-ому прерыванию...

Create_dir:
     mov si,offset Create_dirmess
     call Move_string
     jmp short Go_21h

Delete_dir:
     mov si,offset Delete_dirmess
     call Move_string
     jmp short Go_21h

Change_dir:
     mov si,offset Change_dirmess
     call Move_string
     jmp short Go_21h

Create_file:
     call StrCompare
     jb Go_
     jg Go_
     mov si,offset Create_filemess
     call Move_string
 Go_:
     jmp short Go_21h

Open_fl:
     mov si,offset Open_filemess
     call Move_string
     jmp short Go_21h

Delete_file:
     mov si,offset Delete_filemess
     call Move_string


Go_21h:
     pop es        ;Восстановим регистры...
     pop ds
     popa

  jmp dword ptr cs:[0FCh] ;Передаем управление прежнему 21h-ому
Int_21h_proc endp
;=== StrCompare  ===
 StrCompare proc
    push ds
    push ax
    push di
    push si
    mov di,offset File_name_in
    mov ds,bx   ;DS указывает на сегмент, где находится имя файла
    mov si,dx   ;SI - на смещение
     cld
 @@10:
    lodsb
    scasb
    jne @@20
    or al,al
  jne @@10
 @@20:
  pop si
  pop di
  pop ax
  pop ds
    ret
File_name_in db 'C:\in.txt',0  ;Наш in-файл

; File_name_inlen equ $-File_name_inlen
;myfile db 1 (?)

 StrCompare endp

;=== Переносим строку и пишем информацию в файл ===
Move_string proc
    mov di,2    ;DS:SI указывают на строку
        ;ES:DI - на место в памяти, где будет формироваться строка...
    lodsw    ;Получим длину строки (первый байт строки)
    mov cx,ax    ;Длину строки в CX
    rep movsb    ;Переместили строку по адресу ES:DI (Текущий сегмент:0002h)

    push ds
    mov ds,bx    ;DS указывает на сегмент, где находится имя файла
    mov si,dx    ;SI - на смещение

Next_char2:
    lodsb    ;Получаем очередной символ
    or al,al    ;Это конец строки с именем файла? Проверка на 0...
    jz Zero_found2
    stosb    ;Если еще не конец - заносим его в нашу формирующуюся строку
    jmp short Next_char2 ;Следующий символ...

Zero_found2:
    pop ds    ;Имя файла перенесли! Восстановим DS.

    mov ax,0A0Dh ;Добавим возврат каретки/перевод строки.
    stosw

    dec di
    dec di
    mov word ptr cs:[0],di ;Занесем по 0-ому смещению длину готовой строки

    call Save_file    ;Запишем готовую строку в наш log-файл...

    ret
Move_string endp


;=== Пишем в файл ===
Save_file proc
     call Check_file    ;Проверим, существует ли наш log-файл или нет...

     mov al,02h        ;Открываем файл для чтения/записи
     call Open_file

     mov ax,4202h    ;Устанавливаем указатель на конец файла
     xor cx,cx
     xor dx,dx
     int 3

     mov ah,40h        ;Функция записи в файл
     mov cx,cs:[0]    ;Количество записываемых байт
     mov dx,2        ;Откуда будем писать (DS:DX)
     int 3

     call Close_file    ;Закрываем файл...

     ret
Save_file endp

;=== Проверяем: существует ли нужный файл ===
Check_file proc
     xor al,al        ;Пробуем открыть наш log-файл
     call Open_file
     jnc File_exists    ;Если файл существует, то на метку File_exists

; === Атрибуты файла ===
;00001 - только чтение
;00010 - спрятанный
;00100 - системный
;01000 - метка тома
;010000 - подкаталог
;100000 - архивный
     mov ah,3Ch        ;Если файл не существует, то создадим его.
     mov cx,100010b    ;Атрибут: архивный, спрятанный
     mov dx,offset File_name ;DS:DX указывают на имя файла
     int 3
     jc Error_create    ;Ошибка?.. 
     mov Handle,ax    ;Если успешно создали, то запомним номер файла

File_exists:
     call Close_file    ;Закрываем файл...

Error_create:
     ret

File_name db 'C:\report.txt',0    ;Наш log-файл
Check_file endp

;=== Открытие файла ===
Open_file proc
     mov dx,offset File_name
     mov ah,3Dh
     int 3
     jc Error_open

     mov bx,ax
     mov Handle,ax

Error_open:
     ret
Handle dw 0FFFFh
Open_file endp

;=== Закрытие файла ===
Close_file proc
     pusha
     pushf
     cmp Handle,0FFFFh    ;Нечего закрывать?.. 
     je No_close

     mov ah,3Eh
     mov bx,Handle
     int 3
     mov Handle,0FFFFh    ;Закрываем и отмечаем, что нет открытых файлов...

No_close:
     popa
     popf
     ret
Close_file endp

;--- Сообщения резидента ---
Start_filemess dw Start_filemessl
               db 'Запуск файла      ---> '
Start_filemessl equ $-Start_filemess-2

Create_dirmess dw Create_dirmessl
               db 'Создание каталога ---> '
Create_dirmessl equ $-Create_dirmess-2

Delete_dirmess dw Delete_dirmessl
               db 'Удаление каталога ---> '
Delete_dirmessl equ $-Delete_dirmess-2

Change_dirmess dw Change_dirmessl
               db 'Смена каталога на ---> '
Change_dirmessl equ $-Change_dirmess-2

Create_filemess dw Create_filemessl
                db 'Создание файла    ---> '
Create_filemessl equ $-Create_filemess-2

Open_filemess dw Open_filemessl
              db 'Открытие файла для чтения/записи ---> '
Open_filemessl equ $-Open_filemess-2

Delete_filemess dw Delete_filemessl
                db 'Удаление файла    ---> '
Delete_filemessl equ $-Delete_filemess-2




;   === Инициализация (подготовка и настройка резидента) ===
Init:
       mov ax,9889h    ;Проверим, в памяти ли мы уже или еще нет
       int 21h
       cmp ax,8998h
       jne Set_resident

       mov ah,9        ;Если в памяти, то выведем соответствующее сообщение
       mov dx,offset In_memory
       int 21h

       ret        ;...И вернемся в DOS

Set_resident:        ;Если нас в памяти нет, то установим резидент
; 21h-ое...
       mov ax,3521h
       int 21h        ;Получим и сохраним адрес (вектор) 21h прерывания
       mov word ptr cs:[0FCh],bx
       mov word ptr cs:[0FEh],es

       mov ax,es        ;Установим старый вектор 21h-прерывания на 3...
       push 0           ;(вырубим отладчик)
       pop es
       mov es:[3*4],bx
       mov es:[3*4+2],ax

       mov ax,2521h
       mov dx,offset Int_21h_proc
       int 3        ;"Повесим" нашу процедуру на 21h прерывание

       call Check_file    ;А есть ли наш log-файл?

       mov ah,9
       mov dx,offset Mess_hello
       int 21h

       mov dx,offset Init
       int 27h        ;Оставим программу резидентной в памяти.

In_memory db 'Программа уже загружена в память!!!',0Ah,0Dh,0Ah

Mess_hello db 'Резидент к книге "Ассемблер? Это просто! Учимся программировать", Глава № 19.',0Ah,0Dh,0Ah
           db 'Автор: Калашников Олег Александрович ([email protected]),',0Ah,0Dh
           db 'http://www.Kalashnikoff.ru, Россия, Москва, 2000 год.',0Ah,0Dh,'$'

CSEG ends
end Begin



PM MAIL   Вверх
dumb
Дата 25.7.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Код

...
Create_file:
     call StrCompare
     jne Go_21h
     mov si,offset Create_filemess
     call Move_string
...
 @@10:
    lodsb
    cmp al,'a'
    jb @@11
    cmp al,'z'
    ja @@11
    and al, not 20h ; upcase char
 @@11:
    scasb
    jne @@20
    or al,al
  jne @@10
 @@20:
...
File_name_in db 'C:\IN.TXT',0  ;Наш in-файл (заглавными!)
...


PM MAIL   Вверх
Lordolein
Дата 26.7.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Если перебирать по буквам то работает. Но как же тогда теория - по ней должно работать - я код  проверки строк тоже взял из книжки и кажись все там понятно или в книжке ошибка ,  ( 90% что я чего не понял и хотелось бы знать что) ?
PM MAIL   Вверх
dumb
Дата 27.7.2007, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



у тебя была процедура сравнения строк с учетом регистра букв(т.е. C:\In.txt не равно C:\IN.TXT). я переделал, чтобы зависимости от регистра не было. что непонятно?
PM MAIL   Вверх
Lordolein
Дата 27.7.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Теперь начинаю понимать,посмотрел АSCII─TABLE...., ещё нашел в книжке вместо
and al, not 20h ;  такое sub al, 'a'-'A'  - первое , я так понимаю быстрее выполняется?
Да ,  если прописать имя файла с путем - то не работает т.е. 
File_name_in db 'C:\IN.TXT',0  - не срабатывает 
а
File_name_in db 'IN.TXT',0  - уже хорошо . Путь надо обрабатывать иным способом?

DUMB, спасибо !!





PM MAIL   Вверх
dumb
Дата 27.7.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Lordolein @  27.7.2007,  11:19 Найти цитируемый пост)
and al, not 20h ;  такое sub al, 'a'-'A'  - первое , я так понимаю быстрее выполняется?
нет. никакой разницы нет, если понятней второй вариант, то лучше так и пиши.

Цитата(Lordolein @  27.7.2007,  11:19 Найти цитируемый пост)
'IN.TXT',0  - уже хорошо . Путь надо обрабатывать иным способом?
хех. ну да, программа же может открывать файл без полной спецификации пути. и если б не функция 21/60, были бы проблемы, так как можно не только без указания пути открывать, но и с такими "извращениями", как '.\..\..\file.ext' (относительный путь). но так как функция есть, нам не надо делать утомительный анализ пути:
Код

Create_file:
    call    FileNameCmp
    or      al,al
    je      Go_21h
    mov     si,offset Create_filemess
; выведем в лог полное имя
    mov     bx,cs
    mov     dx,offset FullName
    call    Move_string
...
;=== StrCompare  ===
FullName    db 100h dup (0)

FileNameCmp proc
    push    ds
    push    di
    push    si
    mov     ds,bx   ;DS указывает на сегмент, где находится имя файла
    mov     si,dx   ;SI - на смещение
    mov     di,offset FullName
; 21/60 берет в ds:si имя файла(возможно заданное относительно текущего каталога)
;  и возвращает в es:di полное имя
    mov     ah,60h
; вызов старого обработчика int 21h
    pushf
    call    dword ptr cs:[0FCh]
    mov     ah,0
    jc      @@ret
    mov     si,di
    push    es
    pop     ds
    mov     di,offset FileNameIn
    cld
    xor     ax,ax
@@nextchar:
    lodsb
    cmp     al,'a'
    jb      @@skipcase
    cmp     al,'z'
    ja      @@skipcase
    and     al, not 20h
@@skipcase:
    scasb
    jne     @@ret
    or      al,al
    jne     @@nextchar
    inc     ah
@@ret:
    mov     al, ah ; возвращаем в al(а не в ah) просто из соображений стандарта
    pop     si
    pop     di
    pop     ds
    ret
FileNameIn  db 'C:\IN.TXT',0  ;полное имя нашего файла (заглавными)
FileNameCmp endp
;=== Переносим строку и пишем информацию в файл ===
...

PM MAIL   Вверх
Lordolein
Дата 29.7.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо , все работает,  не совсем понимаю назначение некоторых строк 
Код

    mov     ah,60h
; вызов старого обработчика int 21h
    pushf
    call    dword ptr cs:[0FCh]
    mov     ah,0       ;------------------------- зачем это ?
    jc      @@ret
    mov     si,di
    push    es
    pop     ds
    mov     di,offset FileNameIn
    cld
    xor     ax,ax          ;----------------- и  это ?
@@nextchar:
    lodsb
    cmp     al,'a'
    jb      @@skipcase
    cmp     al,'z'
    ja      @@skipcase
    and     al, not 20h
@@skipcase:
    scasb
    jne     @@ret
    or      al,al
    jne     @@nextchar
    inc     ah               ;----------------------и это ?
 @@ret:


и еще подскажите как правильно считать из него и записать в отловленный обработчиком файл  свои данные до его закрытия главной программой, правильно ли  будет получить Handle
по наступившему событию перехвата, или надо чтоб отработал стандарный?
Делаю так (и не работает):
Код

Int_21h_proc proc
.......
 cmp ah,3Ch        ;Это создание файла?
 je Create_file
..........
Create_file:
    mov Handle1,ax
    call    FileNameCmp
    or      al,al
    je      Go_21h
    mov     si,offset Create_filemess
.........
Go_21h:
     pop es        ;Восстановим регистры...
     pop ds
     popa
  jmp dword ptr cs:[0FCh] ;Передаем управление прежнему 21h-ому
   ;здесь продолжается обработка после передачи управление прежнему 21h-ому
    pup cs    
    pup cs
    pop es       
    pop ds
...........
  ;читаю файл до условия в буфер
  ;пишу в конец файла из этого же буфера
.......
Int_21h_proc endp


Еще раз БОЛЬШОЕ СПАСИБО!


PM MAIL   Вверх
dumb
Дата 30.7.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Lordolein @  29.7.2007,  21:43 Найти цитируемый пост)
не совсем понимаю назначение некоторых строк

ah в нашей функции играет роль флага идентичности строк, который мы в конце переносим в al, потому как булевы значения принято возвращать в almov ah,0 - на случай, если функция "расширения" имени отработает с ошибкой(jc @@ret). ведь если функция вернет ошибку, то мы не можем сравнивать то, что она вернула, с нашей строкой. поэтому мы выходим с 0(типа строки не равны). xor ax,ax - это по сути обнуление регистра ax. т.е. аналог mov ax,0 - просто раньше(на древнем железе) такой способ обнуления работал быстрее, да и код короче(если не учитывать mov в 8-битные регистры). inc ah = mov ah,1 - т.е. просто устанавливаем флаг идентичности строк. уфф... smile

Цитата(Lordolein @  29.7.2007,  21:43 Найти цитируемый пост)
и еще подскажите как правильно считать из него и записать в отловленный обработчиком файл  свои данные до его закрытия главной программой

что-то я не уловил, какие это ты данные собрался читать из файла, который программа только-только пытается создать?! записать-то можно, но многие программы могут этого "не понять", так как их логика предполагает, что файл будет пуст после создания - ошибки будут стопудово.

ты б лучше описал саму цель - что ты хочешь сделать, потому как очень похоже на то, что ты идешь не по тому пути...
PM MAIL   Вверх
Lordolein
Дата 30.7.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

ты б лучше описал саму цель 

к вирусописательству совсем не тянет  smile  smile 
Задача формулируется так : резидентная  программа отслеживает создание броузером (Arachne) файла cookies и состояние ком-порта. При создании cookies , с него надо считать данные по условию и отправить в компорт, т.е. ищем "Put=", после знака равенства пишем все в ком порт пока не встретится символ ";"  , дальше любая информация с компорта дописывается в тот же cookies  для переменной Put.  

Немного почитал книжки - все сначала кажется просто и легко реализуемо(особенно если встретил похожие примеры для изучения)- а на практике выходит наоборот.

 Вот как работать в дебуггере с резидентом ?  

очень признателен за ответы.
PM MAIL   Вверх
dumb
Дата 30.7.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Lordolein @  30.7.2007,  10:16 Найти цитируемый пост)
к вирусописательству совсем не тянет
об это речь и не шла... smile

Цитата(Lordolein @  30.7.2007,  10:16 Найти цитируемый пост)
При создании cookies , с него надо считать данные
тогда схема должна быть примерно такая:
1. отловить создание, вызвать старый обработчик, полученный оттуда хэндл сохранить
2. отловить закрытие(это наиболее корректный путь), сравнить переданный хэндл со своим сохраненным, если совпадает - редактировать файл.

Цитата(Lordolein @  30.7.2007,  10:16 Найти цитируемый пост)
все сначала кажется просто и легко реализуемо
все, что делалось выше - детский лепет по сравнению с работой с ком-портом.

Цитата(Lordolein @  30.7.2007,  10:16 Найти цитируемый пост)
Вот как работать в дебуггере с резидентом ?
DeGlucker тебе в помощь. запускаешь dg.com, потом свой резидент, потом... ээ... (посмотрел доку) жмешь Pause - всплывает деглюкер, в окне кода жмешь Ctrl-I, вводишь номер прерывания и он тебя перемещает аккурат на обработчик.

кстати, весьма странная задачка у тебя. оно для чего такое? smile
PM MAIL   Вверх
Lordolein
Дата 31.7.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

тогда схема должна быть примерно такая

спасибо , уже пробую 
[quote]
жмешь Ctrl-I, вводишь номер прерывания
[/quote
выбираю прырывание 21h, по клавише F8 доходжу до сравнения 
Код

cmp ah,3Ch         ;Это создание файла?

дальше правлю АH на 3С и  в DS:DX записываю значения для файла С:\IN.TXT (эти адреса беру из таблички внизу) потом чтоб не заходить в каждую процедуру (ну прерывание по 3Ch уже работает нормально, а хочу я только посмотреть Handle1) я перемещаю курсор после команды, где вызывается оригинальный обработчик   и жму F4 - деглюкер выходит в ДОС, а когда его активизирую по Pause - то курсор уже улетел кудато, 
Код

mov     dx,offset FullName
     call    Move_string
     mov dx,offset FileNameIn
     pushf
     call    dword ptr cs:[0FCh]
     mov Handle1,ax                  ;---------------сюда курсор  и жму F4 
     jmp Go_21h
 
что я не так делаю ? 
Цитата

весьма странная задачка у тебя

это потому что фирма не богатая и меня интересует ассемблер smile  
PM MAIL   Вверх
dumb
Дата 31.7.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Lordolein @  31.7.2007,  17:41 Найти цитируемый пост)
выбираю прырывание 21h, по клавише F8 доходжу до сравнения
эм. как это по F8? после того, как ты сделал Ctrl-I, 21(можно без h), выбираешь нужное тебе место(просто курсором) и ставишь бряк(брейк-поинт/breakpoint) путем вдавливания кнопки F2 - появится красная метка. потом "отпускаешь" отладчик - F9. вернувшись в ДОС, обычно надо "передернуть" NumLock и один раз нажать какую-либо кнопку, чтобы "отморозить" клаву.
а когда выполнение дойдет до места бряка, отладчик сам всплывет.

потом, можно ставить бряк просто на прерывание - Alt-I.
например, чтобы поставить бряк на 21/3c надо: Alt-I, 21, 3cff.

вобщем, почитай хелп dg_rus.txt smile
PM MAIL   Вверх
Lordolein
Дата 10.8.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



DUMB спасибо
все потихоньку получается, но сейчас немного другим занят -перевожу загрузку ДОСовских машин с Новела на Линукс(Новел тоже на 486, а винтов таких уже нет)- в связи с этим сразу вопрос -в Линуксе легче решить мою задачу (разумеется на 486 будет возможность грузить (надеюсь) Linux и ДОС) а то я замучился с этими прерываниями и зависанием компа под ДОСом? 

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

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

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


 




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


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

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