Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
lolPro
1
TASM

Программа запрещающая удаление файлов программами использующими средства DOS

01.12.2010, 20:51. Показов 2149. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста сделать блок схему для этой программы :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
; tsr.asm
; ЏаЁ¬Ґа Ї*ббЁў*®© १Ё¤Ґ*в*®© Їа®Ја*¬¬л б ЇҐаҐ*®б®¬ Є®¤* ў PSP.
; ‡*ЇаҐй*Ґв г¤*«Ґ*ЁҐ д*©«®ў ** ¤ЁбЄҐ, гЄ*§***®¬ ў Є®¬**¤*®© бва®ЄҐ ўбҐ¬
; Їа®Ја*¬¬*¬, ЁбЇ®«м§гойЁ¬ б।бвў* DOS
; ђҐ§Ё¤Ґ*в**п Їа®Ја*¬¬* §**Ё¬*Ґв ў Ї*¬пвЁ 208 Ў*©в
;
; Љ®¬ЇЁ«пжЁп:
; TASM:
;  tasm /m tsr.asm
;  tlink /t /x tsr.obj
; MASM:
;  ml /c tsr.asm
;  link tsr.obj,,NUL,,,
;  exe2bin tsr.exe tsr.com
; WASM:
;  wasm tsr.asm
;  wlink file tsr.obj form DOS COM
;
    .model  tiny
    .code
    org 2Ch
envseg  dw  ?       ; ᥣ¬Ґ*в*л© *¤аҐб Є®ЇЁЁ ®Єа㦥*Ёп DOS
    org 80h
cmd_len db  ?       ; ¤«Ё** Є®¬**¤*®© бва®ЄЁ
cmd_line db ?       ; **з*«® Є®¬**¤*®© бва®ЄЁ
    org 100h        ; COM-Їа®Ја*¬¬*
 
start:
    jmp short initialize    ; ЇҐаҐе®¤ Ё*ЁжЁ*«Ё§Ёагойго з*бвм
 
int21h_handler  proc    far ; ®Ўа*Ў®взЁЄ ЇаҐалў**Ёп 21h
                pushf       ; б®еа**Ё¬ д«*ЈЁ
        cmp ah,41h  ; Ґб«Ё ўл§ў*«Ё дг*ЄжЁо 41h (г¤*«Ёвм д*©«)
        je  fn41h
        cmp ax,7141h ; Ё«Ё 7141h (г¤*«Ёвм д*©« б ¤«Ё**л¬ Ё¬Ґ*Ґ¬)
        je  fn41h    ; **з*вм **и ®Ўа*Ў®взЁЄ
        jmp short not_fn41h ; Ё**зҐ - ЇҐаҐ¤*вм гЇа*ў«Ґ*ЁҐ ў DOS
fn41h:
        push    ax      ; б®еа**Ё¬ ¬®¤ЁдЁжЁагҐ¬л© аҐЈЁбва
        push bx
        mov bx,dx
        cmp byte ptr [bx+1],':' ; Ґб«Ё ўв®а®© бЁ¬ў®«
                    ; ASCIZ-бва®ЄЁ, ЇҐаҐ¤***®© INT 21h
                    ; ¤ў®Ґв®зЁҐ - §**зЁв ЇҐаўл© бЁ¬ў®« -
                    ; - Ё¬п ¤ЁбЄ*.
        je  full_spec
        mov ah,19h      ; Ё**зҐ: 
        int 21h     ; ”г*ЄжЁп DOS 19h - ®ЇаҐ¤Ґ«Ёвм ⥪гйЁ© ¤ЁбЄ
        add al,'A'      ; ЇаҐ®Ўа*§®ў*вм *®¬Ґа ¤ЁбЄ* Є §*Ј«*ў*®© ЎгЄўҐ
        jmp short compare   ; ЇҐаҐ©вЁ Є ба*ў*Ґ*Ёо
full_spec:
        mov al,byte ptr [bx] ; AL=Ё¬п ¤ЁбЄ* Ё§ ASCIZ-бва®ЄЁ
        and al,11011111b    ; ЇаҐ®Ўа*§®ў*вм Є §*Ј«*ў*®© ЎгЄўҐ
compare:
        db  3Ch ; CMP AL, (**з*«® Є®¤* Є®¬**¤л cmp al,зЁб«®)
drive_letter    db  'D' ; бо¤* Їа®жҐ¤га* Ё*ЁжЁ*«Ё§*жЁЁ §*ЇЁиҐв *г¦*го
                ; ЎгЄўг
        pop bx
        pop ax  ; AX Ў®«миҐ *Ґ Ї®вॡгҐвбп
                        ; Ґб«Ё ¤ЁбЄЁ б®ўЇ*¤*ов
        je  access_denied       ; §*ЇаҐвЁвм г¤*«Ґ*ЁҐ
not_fn41h:      
        popf                ; Ё д«*ЈЁ
        ; Ё ЇҐаҐ¤*вм гЇа*ў«Ґ*ЁҐ ЇаҐ¤л¤г饬㠮Ўа*Ў®взЁЄг INT 21h:
        db  0EAh    ; JMP FAR (**з*«® Є®¤* Є®¬**¤л ¤*«м*ҐЈ® ЇҐаҐе®¤*)
old_int21h  dd  0   ; бо¤* Їа®жҐ¤га* Ё*ЁжЁ*«Ё§*жЁЁ §*ЇЁиҐв *¤аҐб
                ; ЇаҐ¤л¤г饣® ®Ўа*Ў®взЁЄ* INT 21h
access_denied:
                        ; ў®ббв**®ўЁвм
        popf                ; д«*ЈЁ
        push    bp
        mov bp,sp
        or  word ptr [bp+6],1   ; гбв**®ўЁвм д«*Ј ЇҐаҐ*®б*
            ; (ЎЁв 1) ў ॣЁбвॠд«*Ј®ў, Є®в®ал© Ї®¬ҐбвЁ«* Є®¬**¤*
            ; INT 21h ў б⥪ ЇҐаҐ¤ *¤аҐб®¬ ў®§ўа*в*
        pop bp
        mov ax,5        ; ў®§ўа*вЁвм Є®¤ ®иЁЎЄЁ
                    ; "¤®бвгЇ §*ЇаҐйс*"
        iret            ; ўҐа*гвмбп ў Їа®Ја*¬¬г
int21h_handler  endp
 
tsr_length equ $-int21h_handler
 
initialize  proc near
    cmp byte ptr cmd_len,3 ; Їа®ўҐаЁвм а*§¬Ґа Є®¬**¤*®© бва®ЄЁ
    jne not_install ; ¤®«¦*® Ўлвм 3 (Їа®ЎҐ«, ¤ЁбЄ, ¤ў®Ґв®зЁҐ)
    cmp byte ptr cmd_line[2],':' ; Їа®ўҐаЁвм ваҐвЁ© бЁ¬ў®« Є®¬**¤*®©
                ; бва®ЄЁ (¤®«¦*® Ўлвм ¤ў®Ґв®зЁҐ)
    jne not_install
    mov al, byte ptr cmd_line[1]
    and al,11011111b    ; ЇаҐ®Ўа*§®ў*вм ўв®а®© бЁ¬ў®«
                        ; Є §*Ј«*ў*®© ЎгЄўҐ
    cmp al,'A'  ; Їа®ўҐаЁвм зв® нв® *Ґ
    jb  not_install         ; ¬Ґ*миҐ 'A' Ё *Ґ Ў®«миҐ
    cmp al,'Z'  ; 'Z'
    ja  not_install         ; Ґб«Ё е®вм ®¤*® Ё§ нвЁе
    ; гб«®ўЁ© *Ґ ўлЇ®«*пҐвбп - ўл¤*вм Ё*д®а¬*жЁо ® Їа®Ја*¬¬Ґ Ё ўл©вЁ
    ; Ё**зҐ - **з*вм Їа®жҐ¤гаг Ё*ЁжЁ*«Ё§*жЁЁ
    mov byte ptr drive_letter,al    ; ЇҐаҐ¤*вм AL ў ⥫®
                        ; १Ё¤Ґ*в*
    push    es
    mov ax,3521h        ; AH=35h, AL=*®¬Ґа ЇаҐалў**Ёп
    int 21h         ; Ї®«гзЁвм *¤аҐб ®Ўа*Ў®взЁЄ* INT 21h
    mov word ptr old_int21h,bx  ; Ё Ї®¬ҐбвЁвм ҐЈ® ў ⥫® १Ё¤Ґ*в*
    mov word ptr old_int21h+2,es ;
    pop es
 
    cld             ; ЇҐаҐ*®б Є®¤* १Ё¤Ґ*в*
    mov si,offset int21h_handler ;**зЁ**п б нв®Ј® *¤аҐб*
    mov di,80h          ; ў PSP:0080h
    mov cx,tsr_length
    rep movsb
 
    mov ax,2521h        ; AH = 25h, AL=*®¬Ґа ЇаҐалў**Ёп
    mov dx,80h          ; DS:DX - *¤аҐб **襣® ®Ўа*Ў®взЁЄ*
                    ; (Є®в®ал© Ї®б«Ґ ЇҐаҐ*®б* - PSP:80h)
    int 21h         ; гбв**®ўЁвм ҐЈ®
 
    mov ah,49h          ; AH=49h
    mov es,word ptr envseg  ; ES=ᥣ¬Ґ*в*л© *¤аҐб Ў«®Є* б Є®ЇЁҐ©
                ; ЇҐаҐ¬Ґ**ле б।л DOS
    int 21h     ; ®бў®Ў®¤Ёвм Ї*¬пвм, ЁбЇ®«м§гҐ¬го нвЁ¬ Ў«®Є®¬
 
    mov dx,80h+tsr_length   ; DX - *¤аҐб ЇҐаў®Ј® Ў*©в* §* Є®*殬
                    ; १Ё¤Ґ*в*®© Їа®Ја*¬¬л
    int 27h         ; §*ўҐаиЁвм ўлЇ®«*Ґ*ЁҐ, ®бв*ўиЁбм
                    ; १Ё¤Ґ*⮬
 
not_install:
    mov ah,9            ; AH=09h
    mov dx,offset usage     ; DS:DX=*¤аҐб бва®ЄЁ б Ё*д®а¬*жЁҐ© ®Ў
                    ; ЁбЇ®«м§®ў**ЁЁ Їа®Ја*¬¬л
    int 21h         ; ўлў®¤ бва®ЄЁ ** нЄа**
    ret             ; ®Ўлз*®Ґ §*ўҐаиҐ*ЁҐ Їа®Ја*¬¬л
 
; ⥪бв, Є®в®ал© ўл¤*св Їа®Ја*¬¬* ЇаЁ §*ЇгбЄҐ б *ҐЇа*ўЁ«м*®© Є®¬**¤*®©
; бва®Є®©
usage   db  'Usage: tsr.com D:',0Dh,0Ah
    db  'Denies delete on drive D:',0Dh,0Ah
    db  '$'
 
initialize  endp
    end start
Добавлено через 1 минуту
это подразумеваеться как "программа запрещающая удаление файлов программами использующими средства DOS"
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2010, 20:51
Ответы с готовыми решениями:

Программа, запрещающая изменять местоположение и размер каких-либо окон
Я представляю это так: программа сидит в трее и имеет два состояния: включено и выключено (меняется...

Программа для копирования файлов c жесткого диска на флешку под DOS
Добрый день! Подскажите, пожалуйста, программу, с помощью которой можно скопировать файлы на...

Программа для обработки аргументов командной строки (удаление файлов определенного размера)
Очень нужна программа на JS, которая будет обрабатывать аргументы командной строки (удалять файлы...

Открытие файлов, не ассоциированных с какими-либо программами
Если windows, не имеет ассоциации какого то расширения, то задает вопрос, какой программой его...

4
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.12.2010, 04:59 2
lolPro, а ты сам видел комментарии к своей программе?
0
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,927
02.12.2010, 09:12 3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
; tsr.asm
; Пример п*ссив*ой резиде*т*ой прогр*ммы с пере*осом код* в PSP.
; З*прещ*ет уд*ле*ие ф*йлов ** диске, ук*з***ом в ком**д*ой строке всем
; прогр*мм*м, использующим средств* DOS
; Резиде*т**я прогр*мм* з**им*ет в п*мяти 208 б*йт
;
; Компиляция:
; TASM:
;  tasm /m tsr.asm
;  tlink /t /x tsr.obj
; MASM:
;  ml /c tsr.asm
;  link tsr.obj,,NUL,,,
;  exe2bin tsr.exe tsr.com
; WASM:
;  wasm tsr.asm
;  wlink file tsr.obj form DOS COM
;
        .model  tiny
        .code
        org     2Ch
envseg  dw      ?               ; сегме*т*ый *дрес копии окруже*ия DOS
        org     80h
cmd_len db      ?               ; дли** ком**д*ой строки
cmd_line db     ?               ; **ч*ло ком**д*ой строки
        org     100h            ; COM-прогр*мм*
 
start:
        jmp short initialize    ; переход и*ици*лизирующую ч*сть
 
int21h_handler  proc    far     ; обр*ботчик прерыв**ия 21h
                pushf           ; сохр**им фл*ги
                cmp     ah,41h  ; если вызв*ли фу*кцию 41h (уд*лить ф*йл)
                je      fn41h
                cmp     ax,7141h ; или 7141h (уд*лить ф*йл с дли**ым име*ем)
                je      fn41h    ; **ч*ть **ш обр*ботчик
                jmp short not_fn41h ; и**че - перед*ть упр*вле*ие в DOS
fn41h:
                push    ax              ; сохр**им модифицируемый регистр
                push bx
                mov bx,dx
                cmp     byte ptr [bx+1],':'     ; если второй символ
                                        ; ASCIZ-строки, перед***ой INT 21h
                                        ; двоеточие - з**чит первый символ -
                                        ; - имя диск*.
                je      full_spec
                mov     ah,19h          ; и**че: 
                int     21h             ; Фу*кция DOS 19h - определить текущий диск
                add     al,'A'          ; преобр*зов*ть *омер диск* к з*гл*в*ой букве
                jmp short compare       ; перейти к ср*в*е*ию
full_spec:
                mov     al,byte ptr [bx] ; AL=имя диск* из ASCIZ-строки
                and     al,11011111b    ; преобр*зов*ть к з*гл*в*ой букве
compare:
                db      3Ch     ; CMP AL, (**ч*ло код* ком**ды cmp al,число)
drive_letter    db      'D'     ; сюд* процедур* и*ици*лиз*ции з*пишет *уж*ую
                                ; букву
                pop     bx
                pop     ax      ; AX больше *е потребуется
                                                ; если диски совп*д*ют
                je      access_denied           ; з*претить уд*ле*ие
not_fn41h:              
                popf                            ; и фл*ги
                ; и перед*ть упр*вле*ие предыдущему обр*ботчику INT 21h:
                db      0EAh    ; JMP FAR (**ч*ло код* ком**ды д*ль*его переход*)
old_int21h      dd      0       ; сюд* процедур* и*ици*лиз*ции з*пишет *дрес
                                ; предыдущего обр*ботчик* INT 21h
access_denied:
                                                ; восст**овить
                popf                            ; фл*ги
                push    bp
                mov     bp,sp
                or      word ptr [bp+6],1       ; уст**овить фл*г пере*ос*
                        ; (бит 1) в регистре фл*гов, который поместил* ком**д*
                        ; INT 21h в стек перед *дресом возвр*т*
                pop     bp
                mov     ax,5            ; возвр*тить код ошибки
                                        ; "доступ з*прещё*"
                iret                    ; вер*уться в прогр*мму
int21h_handler  endp
 
tsr_length equ $-int21h_handler
 
initialize      proc near
        cmp     byte ptr cmd_len,3 ; проверить р*змер ком**д*ой строки
        jne     not_install     ; долж*о быть 3 (пробел, диск, двоеточие)
        cmp     byte ptr cmd_line[2],':' ; проверить третий символ ком**д*ой
                                ; строки (долж*о быть двоеточие)
        jne     not_install
        mov     al, byte ptr cmd_line[1]
        and     al,11011111b    ; преобр*зов*ть второй символ
                                                ; к з*гл*в*ой букве
        cmp     al,'A'  ; проверить что это *е
        jb      not_install                     ; ме*ьше 'A' и *е больше
        cmp     al,'Z'  ; 'Z'
        ja      not_install                     ; если хоть од*о из этих
        ; условий *е выпол*яется - выд*ть и*форм*цию о прогр*мме и выйти
        ; и**че - **ч*ть процедуру и*ици*лиз*ции
        mov     byte ptr drive_letter,al        ; перед*ть AL в тело
                                                ; резиде*т*
        push    es
        mov     ax,3521h                ; AH=35h, AL=*омер прерыв**ия
        int     21h                     ; получить *дрес обр*ботчик* INT 21h
        mov     word ptr old_int21h,bx  ; и поместить его в тело резиде*т*
        mov     word ptr old_int21h+2,es ;
        pop     es
 
        cld                             ; пере*ос код* резиде*т*
        mov     si,offset int21h_handler ;**чи**я с этого *дрес*
        mov     di,80h                  ; в PSP:0080h
        mov     cx,tsr_length
        rep movsb
 
        mov     ax,2521h                ; AH = 25h, AL=*омер прерыв**ия
        mov     dx,80h                  ; DS:DX - *дрес **шего обр*ботчик*
                                        ; (который после пере*ос* - PSP:80h)
        int     21h                     ; уст**овить его
 
        mov     ah,49h                  ; AH=49h
        mov     es,word ptr envseg      ; ES=сегме*т*ый *дрес блок* с копией
                                ; переме**ых среды DOS
        int     21h             ; освободить п*мять, используемую этим блоком
 
        mov     dx,80h+tsr_length       ; DX - *дрес первого б*йт* з* ко*цом
                                        ; резиде*т*ой прогр*ммы
        int     27h                     ; з*вершить выпол*е*ие, ост*вшись
                                        ; резиде*том
 
not_install:
        mov     ah,9                    ; AH=09h
        mov     dx,offset usage         ; DS:DX=*дрес строки с и*форм*цией об
                                        ; использов**ии прогр*ммы
        int     21h                     ; вывод строки ** экр**
        ret                             ; обыч*ое з*верше*ие прогр*ммы
 
; текст, который выд*ёт прогр*мм* при з*пуске с *епр*виль*ой ком**д*ой
; строкой
usage   db      'Usage: tsr.com D:',0Dh,0Ah
        db      'Denies delete on drive D:',0Dh,0Ah
        db      '$'
 
initialize      endp
        end     start
Все, что можно вытянуть из комментариев, читай и делай блок-схему.
1
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.12.2010, 09:55 4
судя по возможности компиляции на тасм, масм и васм -- текст выдернут из книги Зубкова
0
1 / 1 / 0
Регистрация: 28.06.2018
Сообщений: 107
08.11.2020, 21:56 5
alexcoder, добрый вечер можете помочь нарисовать блок схему
0
08.11.2020, 21:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2020, 21:56
Помогаю со студенческими работами здесь

Открытие программами файлов из списка, в текстовом файле
Здравствуйте ув. форумчане. Помогите допилить, ну очееень надо. Ос debian wheezy. Посредствам баша...

Программа вычисления функции с под-программами
Составить программу вычисления функции с использованием подпрограммы-процедуры при х = 0, 45. ...

Программа управляющая другими программами и процессами?
У меня такая проблема: мне нужно чтобы каждый день, автоматически закрывался мозилла и запускался...

есть программа надо некоторыю нюансы исправить . типа удаление столбцов и наладки сохранения открытия файлов
Срочно нужна помощ . курсач горит . есть программа надо некоторыю нюансы исправить . типа удаление...

Средства для чтения ini файлов.
А нет ли в АСП готовых средств для чтения стандартных ini-файлов?

Программа для обмена данными между другим программами
Не знаю в какую часть форума написать, изучаю c# поэтому тут. Надо сделать небольшую программу для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru