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

Резидентная программа: по комбинации Ctrl+alt+e показывает на экране фамилию с интервалом в 4 секунды

30.04.2015, 22:31. Показов 2044. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Написать резидентную программу, которая по комбинации Ctrl+alt+e показывает на экране фамилию с интервалом в 4 секунды.
Все работает, но
если сначала запустить (rez.com), потом открыть td.exe, в нем Dos SHell , оттуда удалить (rez.com off)
после чего закрыть tdшник (alt+x) и снова попытаться выгрузить (rez.com off) то крошится ддос
там проверки кое какие есть, но видимо не все

компил:
Code
1
2
Tasm rez.asm
tlink /t  rez, rez.com
запуск:
Code
1
rez.com
удаление из памяти
Code
1
rez.com off
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
text segment 'code' 
org 256 ;для СOM
assume cs:text,ds:text  
main proc
jmp init  
;Поля данных резидентной секции
empty db   '            $' 
msg_fio db 'FAMILIYA $'
flag1 dw 0
count dw 0
old_2fh dd 0    ; Ячейка для сохранения системного вектора 2Fh
old_09h dd 0    ; Ячейка для сохранения системного вектора 09h
old_1Ch dd 0     ; Ячейка для сохранения системного вектора 1Сh
new_09h proc
; Сохраним используемые регистры
    push es
    push ax
    push bx
    push cx
    push dx
    push ds
    push cs ; Настроим DS на наш сегмент для простоты программирования
    pop ds   
    IN ax,60h   ;Чтение портов клавиатуры в AX
    cmp al,18   ; проверка нажатия буквы E
    JNZ exit    ; не нажата - выходим
    MOV AX,0    
    MOV ES,AX          ; Чтение флагов состояния  
    MOV AL,ES:[417h]   ; клавиатуры в регистр AL и 
    AND AL,00001100b   ; определение нажаты ли клавиши 
    CMP AL,00001100b   ; Ctrl-Alt, если нет, то 
    JNZ exit        ; возврат управления
    NOT flag1     
    
; Восстановим использовавшиеся регистры 
exit: 
    pop ds 
    pop dx 
    pop cx 
    pop bx 
    pop ax 
    pop es
    jmp cs:old_09h         ; Передадим управление системному обработчику "int09h"
new_09h endp              ; Конец процедуры
 
new_1Ch proc
    push ax
    push es
    push dx
    push ds    
    push cs ; Настроим DS на наш сегмент для простоты программирования
    pop ds  
    
    mov ax,0b800h        ;Загружаем в сегментный регистр адресса 0 видеостраницы
    mov es,ax 
 
cmp flag1,0
je exit1
inc count
 
cmp count,72 ; 4 сек прошло?
jne p1 ;Нет -> Ждем еще секунду и чистим экран. Если 4 сек прошло, то выводим фамилию
    mov si,3410     ; где выводить 
    mov di, offset msg_fio  ;что выводить 
    mov cx, 11      ; сколько выводить
c1: mov ah, [di]
    inc di
    mov es:[si],ah
    add si,2
    loop c1
p1: cmp count,90 ; прошло 5 секунд?
jne exit1 ;нет -> выходим. Если прошло - чистим экран
    mov si,3410 ;где выводим
    mov di, offset empty ;что выводим  (пробелы)
    mov cx, 11  ; сколько выводим
c2: mov ah, [di]
    inc di
    mov es:[si],ah
    add si,2
    loop c2
    mov count,0
exit1:
pop ds
pop dx
pop es
pop ax
iret 
new_1Ch endp 
 
; Обработчик мультиплексорного прерывания 
new_2fh proc
    cmp ah,0f1h ; Проверим номер функции мультиплексорного прерывания
    jne out_2fh ; Не наша - на выход
    cmp al,00h  ; Подфункция проверки на повторную установку?
    je inst               ; Да, сообщим о невозможности повторной установки
    cmp al,01h  ;Подфункция выгрузки? 
    je off                     ; Да - на выгрузку
    jmp short out_2fh   ; Неизвестная подфункция, на выход
inst: 
    mov al,0ffh            ; Программа уже установлена
    iret                 ; Выход из прерывания
out_2fh:
    jmp cs:old_2fh ; Переход в следующий по цепочке обработчик прерывания 2Fh
; Выгрузим программу из памяти, предварительно восстановив все перехваченные ею векторы
; Сохраним используемые регистры 
off: 
    push ds 
    push es 
    push dx 
    push bx
;------------------------------------------------------------------------   
    ; проверка на связность!
    mov ax,351Ch    ; если нашли 3 прерывания  
    int 21h
    push es
    pop ax
    push cs
    pop dx
    cmp ax,dx
    je msg1c 
    mov ax,0FFFFh
    jmp error_exit
    
msg1c:     
    mov ax,3509h  
    int 21h
    push es
    pop ax
    cmp ax,dx
    je msg09
 
    mov ax,0EFFFh  
    jmp error_exit
    
msg09:     
    mov ax,352fh
    int 21h
    push es
    pop ax
    cmp ax,dx
    je msg2f
 
    mov ax,0DFFFh
    jmp error_exit     
msg2f:     
;------------------------------------------------------------------
; Восстановим вектор 09h  ; 
    mov ax,2509h          ;Функция установки вектора
    lds dx,cs:old_09h    ; Заполним DS:DX
    int 21h 
; Восстановим вектор 2fh 
    mov ax,252fh          ;Функция установки вектора
    lds dx,cs:old_2fh     ;Заполним DS:DX
    int 21h
; Восстановим вектор 1Ch 
    mov ax,251Ch          ;Функция установки вектора
    lds dx,cs:old_1Ch     ;Заполним DS:DX
    int 21h
; Получим из PSP адрес собственного окружения и выгрузим его 
    mov es,cs:2ch   ; ES окружение
    mov ah,49h  ; Функция освобождения блока памяти
    int 21h
; Выгрузим теперь саму программу
    push cs              ; Загрузим в ES содержимое CS, т.е. сегментный адрес PSP
    pop es
    mov ah,49h  ; Функция освобождения блока памяти
    int 21h
; Восстановим использовавшиеся регистры      
error_exit:
    pop bx
    pop dx 
    pop es 
    pop ds
    iret                  ;Возврат в вызвавшую программу
new_2fh endp        ; Конец процедуры обработки прерывания 2Fh
end_res=$   ; Смещение конца резидентной части программы
main endp 
tail db 'off'              ; Ожидаемый хвост команды
flag db 0                ;Флаг требования выгрузки
 
; Процедура инициализации 
init proc
    mov cl,es:80h         ;Получим длину хвоста PSP
    cmp cl,0                ;Длина хвоста = 0 ?
    je live                     ;Да программа запущена без параметров
    xor ch,ch               ; Теперь СХ=СL=длина хвоста
    mov di,81h             ; DS:SI хвост в PSP
    lea si,tail               ; DS:SI поле tail
    mov al,' '                ;Уберём пробелы из начала хвоста
repe  scasb           ;Сканируем хвост, пока пробелы
    dec di                   ;DI первый символ после пробелов
    mov cx,3               ;Ожидаемая длина параметра
repe  cmpsb          ;Сравниваем введённый хвост с ожидаемым 
    jne live                  ;Введена неизвестная команда
    inc flag                  ;Введено "off", установим флаг запроса на выгрузку
 
; Проверим, не установлена ли уже данная программа 
live:
    mov ah,0f1h ; Установим нашу функцию
    mov al,0                  ; и подфункцию на наличие нашей программы в оперативной памяти
    int 2fh 
    cmp al,0ffh            ; Программа установлена?
    je installed           ; Да, при наличии запроса на выгрузку её можно выгрузить
 
; Сохраним вектор 2fh
    mov ax,352fh                      ; Функция получения вектора 2fh
    int 21h
    mov word ptr cs:old_2fh,bx        ; Сохраним смещение системного обработчика 
    mov word ptr cs:old_2fh+2,es    ; Сохраним сегмент системного обработчика
; Заполним вектор 2fh
    mov ax,252fh                     ; Функция установления вектора прерывания 2fh
    mov dx,offset new_2fh              ; Смещение нашего обработчика 
    int 21h 
 
; Сохраним вектор 09h
    mov ax,3509h                       ; Функция получения вектора 09h
    int 21h
    mov word ptr cs:old_09h,bx        ; Сохраним смещение системного обработчика 
    mov word ptr cs:old_09h+2,es    ; Сохраним сегмент системного обработчика ; Заполним вектор 09h
    mov ax,2509h                       ; Функция установления вектора прерывания 09h
    mov dx,offset new_09h              ; Смещение нашего обработчика 
    int 21h
 
; Сохраним вектор 1Ch
    mov ax,351Ch                       ; Функция получения вектора 09h
    int 21h
    mov word ptr cs:old_1Ch,bx        ; Сохраним смещение системного обработчика 
    mov word ptr cs:old_1Ch+2,es    ; Сохраним сегмент системного обработчика ; Заполним вектор 09h
    mov ax,251Ch                       ; Функция установления вектора прерывания 09h
    mov dx,offset new_1Ch              ; Смещение нашего обработчика 
    int 21h
 
; Выведем на экран информационное сообщение 
by: 
    mov ax,0900h    ; Показываем сообщение фио
    mov dx,offset mes
    int 21h
    mov ax,3100h        ; Функция "завершиться и остаться резидентным"
    mov dx,(end_res-main+10fh)/16   ;Размер в параграфах
    int 21h
installed:
    cmp flag, 1 ; Запрос на выгрузку установлен?
    je unins                  ; Да, на выгрузку
; Выведем на экран информационное сообщение
    mov ah, 09h ; Функция вывода на экран
    lea dx,mes1 ; DS:DX адрес строки
    int 21h
    mov ax,4c01h    ; Функция завершения с кодом возврата
    int 21h
unins:
; Перешлём в первую (резидентную) копию программы запрос на выгрузку 
    mov ax,0f101h   ; Наша функция с подфункцией выгрузки
    int 2fh     ; Мультиплексное прерывание
    cmp ax,0FFFFh
    jne p1c
    mov ah, 09h
    lea dx,error1c
    int 21h
    jmp quit
p1c:    cmp ax,0EFFFh
    jne p09
    mov ah, 09h
    lea dx,error09
    int 21h
    jmp quit
p09:    cmp ax,0DFFFh
    jne p2f
    mov ah, 09h
    lea dx,error2f
    int 21h
    jmp quit
p2f:    
; Выведем на экран информационное сообщение
    mov ah,09h  ; Функция вывода на экран
    lea dx,mes2 ; DS:DX адрес строки
    int 21h
quit: mov ax,4c00h    ; Функция завершения программы
    int 21h
 
mes db 'Program installed$' , 0
mes1 db 'Program already installed$' ,0
mes2 db 'Program is uninstalled$' ,0
error1c db 'Error 1ch Program can not be uninstalled$' ,0
error09 db 'Error 09h Program can not be uninstalled$' ,0
error2f db 'Error 2fh Program can not be uninstalled$' ,0
 
init endp
text ends
end main
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2015, 22:31
Ответы с готовыми решениями:

Резидентная программа, отлавливающая нажатие alt-ctrl-del и блокирующая рабочую станцию до ввода пароля.
Помогите сделать задачу(написать код) ТАСМ,собственно вот сама задача: Написать резидентную программу,которая будет отлавливать нажатие...

Резидентная программа: по нажатию сочетания ctrl+S - создать файл, по ctrl+X - выгрузиться из памяти
Программа резидент по нажатию сочетания ctrl+S должна создать файл, по ctrl+X - выгрузиться из памяти. Не резидент создает без проблем,...

Считывание комбинации клавиш (Ctrl + Alt)
Понимаю, как считывать нажатие одной: if (QApplication::keyboardModifiers() == Qt::ControlModifier) {...} Пытаюсь сделать то же для...

16
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
01.05.2015, 13:50
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Цитата Сообщение от Fakeoke Посмотреть сообщение
после чего закрыть tdшник (alt+x) и снова попытаться выгрузить (rez.com off) то крошится ддос
там проверки кое какие есть, но видимо не все
Просто теоретическое рассуждение.
Ты запускаешь свою программу. При этом некий вектор равен X0.
Ты его перехватываешь и заменяешь на X1, который цепочится с X0.
Запускается TD и перехватывает и заменяет тот-же вектор, делая его X2, который цепочится с X1.
Из под TD ты запускаешь свою программу на выгрузку и она восстанавливает X0.
Ты завершаешь TD, который восстанавливает X1, который теперь указывает туда где твоей программы уже нет.

Добавлено через 2 минуты
Мораль - нельзя восстанавливать прерывание из под программы, которая сама его восстанавливает.

Добавлено через 2 минуты
DEBUG.EXE вроде бы ничего кроме 3-го и 1-го векторов не перехватывает.

Добавлено через 7 минут
Проверил только-что. TD вектор прерывание 1Ch не трогает, а вот вектора 9 и 2Fh перехватывает. Из-за последних у тебя и крашится.

Добавлено через 10 минут
Ах, да, предыдущие рассуждения не годятся. У тебя там проверка на дальнейшую неперехваченность векторов есть.

Добавлено через 11 минут
Цитата Сообщение от Fakeoke Посмотреть сообщение
; Выгрузим теперь саму программу
push cs ; Загрузим в ES содержимое CS, т.е. сегментный адрес PSP
pop es
mov ah,49h ; Функция освобождения блока памяти
int 21h
; Восстановим использовавшиеся регистры
error_exit:
pop bx
pop dx
pop es
pop ds
iret
Ты из обработчика прерывания 2Fh выгружаешь программу. Это не есть правильно.
Как бы даже теоретически после этого память программы может использоваться уже
как угодно, а тебе еще хвостик обработчика прерывания надо довыполнить в памяти,
которая уже объявлена свободной.

Добавлено через 3 минуты
И еще вопрос, ответа на который я пока не знаю. Можно из обработчика прерывания 2Fh вызывать
ДОС по Int 21h ? Из обработчиков аппаратных прерываний ясен пень нельзя. А вот из обработчика 2Fh ?

Добавлено через 3 минуты
Цитата Сообщение от Fakeoke Посмотреть сообщение
mov es,cs:2ch ; ES окружение
mov ah,49h ; Функция освобождения блока памяти
int 21h
Окружение освободи до постановки в резидент !!!
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
01.05.2015, 14:07
Fakeoke
Вам все озвучил Ethereal, Debug'ер ставит обработчики, и он не занимается контролем повторной входимости прерываний, т.к. считает, что он один в системе, поэтому , вешайте свои обработчики на другие прерывания, или сами занимайтесь контролем. Но это уже тема борьбы вредоноса с антивредом.
Удачи!
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
01.05.2015, 14:10
Цитата Сообщение от Fakeoke Посмотреть сообщение
если сначала запустить (rez.com), потом открыть td.exe, в нем Dos SHell , оттуда удалить (rez.com off)
Я попробовал. Под TD в DOS Shell твоя программа кричит, что не может быть удалена из памяти.
Когда я выхожу из TD и запускаю rez off, то программа удаляется и внешних проявлений краша не видно.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
01.05.2015, 14:20
Ethereal
Это могло быть до Win95, там "среда" была 16-ти разрядная, сейчас Вам облочка эммулятора, просто не позволит 32-х битное приложение в 16-ти битной "среде" и Вы поймаете что-то вроде "Это не те дроиды , которые Вы хотели, они в другом месте танцуют"(пардон, шутка, по мотивам "Ученика чародея").
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
01.05.2015, 14:31
У меня дома есть отдельный компьютер (у меня дома вообще 4 компьютера рабочих) с Win98 на котором можно выбрать и загрузку MS-DOS. А проверял я в Win-XP-32 из под FAR потому как переползать за упомянутый комп ради этого лень.

@FakeOff
Я бы выгружал резидент из памяти так. Окружение освободил бы еще до постанова в резидент. При постанове оставлял бы код в памяти только по метку init. При выгрузке вектора прерываний читал бы и восстанавливал напрямую обращаясь к памяти (без Int 21h) и не забывая перед их модификацией cli и после sti. Код из памяти выгрузил бы напрямую манипулируя цепочками блоков памяти (опять без Int 21h) и перед их модификацией не забыв сделать cli, чтобы снова разрешить прерывания уже навсегда выходя из своего кода по iret. По крайней мере это было бы точно не крашабельно.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
01.05.2015, 14:51
Цитата Сообщение от Ethereal Посмотреть сообщение
Окружение освободил бы еще до постанова в резидент
Вы склоняте кодера на тёмную стророну силы, джедаи Вам это не простят. Они будут Вас преследовать.
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
02.05.2015, 14:15
Цитата Сообщение от Fakeoke Посмотреть сообщение
old_09h dd 0 ; Ячейка для сохранения системного вектора 09h
Некорректно. Надо пользовать int 15h.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
02.05.2015, 15:38
Можно и не использовать Int 15h. Можно перехватить Int 16h, в обработчике вызвать старый обработчик pushf call far и после возврата из него проверить в AL код симовола E, если да, то еще проверить состояние нажатых Ctrl-Alt в 0:417h и выставить флажок, если нажаты и в любом случае выйти по iret. А функция 4Fh прерывания Int 15h, ну в ранних BIOS-ах не было такой функции. Когда-то писали корректно и без нее.
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
02.05.2015, 19:56  [ТС]
ох е, столько всего написано...
давайте лучше мне строчками кода что и куда пихнуть, сам не допру, боюсь
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
12.05.2015, 15:44  [ТС]
ВВЕРХ
что куда вставить, подскажите
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
12.05.2015, 16:10
Поручик Ржевский, молчать !
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
12.05.2015, 16:12
Цитата Сообщение от Ethereal Посмотреть сообщение
А функция 4Fh прерывания Int 15h, ну в ранних BIOS-ах не было такой функции. Когда-то писали корректно и без нее.
OMG... В ранних - это в каких же? Ковырнул архивы - первая попытка перехвата int 15h/4Fh относится к августу 1988.
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
12.05.2015, 20:34  [ТС]
Ребята, может по делу лучше?
0
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
12.05.2015, 20:53  [ТС]
вообщем я не знаю в чем там была беда, но я взял другую папку с tasm, td итд
там все заработало...
теперь вопрос.. как так?

и может все-таки как-то заставить работать это?
п.с. с нерабочим тдшником архив прилагаю
Вложения
Тип файла: rar rez.rar (385.4 Кб, 4 просмотров)
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
13.05.2015, 00:51
Лучший ответ Сообщение было отмечено Fakeoke как решение

Решение

Цитата Сообщение от Charles Kludge Посмотреть сообщение
OMG... В ранних - это в каких же? Ковырнул архивы - первая попытка перехвата int 15h/4Fh относится к августу 1988.
Хер его знает. Я резидентных программ написался от души еще на Правец-16. А это была еще IBM PC XT. И точно тебе говорю писал именно все это и корректно и без int15h/4Fh. Просто тот, кто в 1988 начал использовать int15h/4Fh, он наверно без него не умел и писал программу, которая только на его компе и могла исполняться. В Tech Help этой функции нет. Значит и на ранних IBM PC AT этой функции не было.

Добавлено через 2 часа 4 минуты
Цитата Сообщение от Fakeoke Посмотреть сообщение
Все работает, но
если сначала запустить (rez.com), потом открыть td.exe, в нем Dos SHell , оттуда удалить (rez.com off)
после чего закрыть tdшник (alt+x) и снова попытаться выгрузить (rez.com off) то крошится ддос
там проверки кое какие есть, но видимо не все
Вот чо ты тут вытроряешь ?
Ты запустил резиденту и она встала. Отлично.
Вектор прерывания 2Fh указывает на твою программу.
Запустил TD. При этом TD перехватил прерывание 2Fh и запомнил его старое значение. Отлично.
Из под TD выгрузил свою резиденту.
Завершил TD. При завершении TD восстановил вектор прерывания 2Fh таким, каким он был в момент его запуска.
Т.е таким, который указывал на твою программу. Которой в памяти уже нет потому-что она выгружена.
Т.е вектор прерывания 2Fh теперь указывает пальцем в небо.
Теперь ты исполняешь rez off, при этом твоя программа исполняет int 2Fh, который указывает пальцем в небо и все крашится.

Вся фишка в том, что ты говоришь, что из под TD свою резиденту выгрузил.
А это ненормально. Твоя программа должна была обнаружить, что вектора прерываний
перехвачены после нее и не дать себя выгрузить, а не обнаружила. Ну так найди почему.
У меня твоя программа обнаружила, а у тебя нет.
Когда я попробовал проделать то-же самое, то твоя программа выгрузить себя из под TD не дала.
А у тебя дала. Весь вопрос почему ?
Может все дело в .tr файле, который если он есть, не только загружает
программу, но и восстанавливает для нее некий контекст. Ибо это Turbo debugger restart
файл. Какой контекст ? А TD его знает. Факт, что у меня этого файла не было.
А у тебя был. И неизвестно какую хрень содержал.

Добавлено через 32 минуты
------------------------------------------------------------
Ни фига все не так. У тебя TD 2.51, а у меня TD 5.0 и твой прерывания 2Fh
не перехватывает. В отличие от моего. Поэтому у тебя резидента из под
TD выгружалась, а у меня нет.

Добавлено через 7 минут
Значения векторов прерывания, кстати можно смотреть по
debug
d0:0
d
q

Что я буду и делать.

1.) Запускаю COMMAND
Смотрю по debug вектор 2Fh : 50 09 09 D7
2.) Запускаю rez1. Она встала в резидент
Смотрю по debug вектор 2Fh : BB 01 DD 06
3.) Запускаю TD 2.51
Из TD смотрю вектор 2Fh : BB 01 DD 06
4.) Из TD запускаю DOS Shell
Смотрю по debug вектор 2Fh : BB 01 DD 06
5.) Запускаю rez1 off
Она говорит, что выгрузилась
Смотрю по debug вектор 2Fh : 50 09 09 D7
6.) Выхожу из DOS Shell обратно в TD
Из TD смотрю вектор 2Fh : BB 01 DD 06
Все ясно. Гризда не за горами.
7.) Выхожу из TD
Запускаю debug, чтобы посмотре...
Все стоит колом

Все ясно ?
1
524 / 400 / 213
Регистрация: 28.07.2011
Сообщений: 2,219
13.05.2015, 13:19  [ТС]
проблема была в дебаггере, тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2015, 13:19
Помогаю со студенческими работами здесь

Заблокировать/откл. клавы включая комбинации(ALT+.. , Shift+... , Win+..., Ctrl+ ... )
Вообщем, есть задача: нужно заблокировать/отключить клавиатуру. В поиске искал, но решения не нашел. Я это делаю через хук(hook). Он...

Нужно сделать программу для выполнения комбинации клавиш Ctrl + Shift + Alt + End
Отключились клавиши Ctrl и Alt, пока выбираю клавиатуру нужны быстрые сочетания Ctrl + Shift + Alt + End. Кто может пожалуйста помогите.

Окно безопасного входа в систему Windows XP (требующего нажать Ctrl-Alt-Del) зависает при нажатии Ctrl-Alt-Del
Здравствуйте. Недавно столкнулся с проблемой. Есть компьютер, подключенный к домену, в групповой политике прописано требование нажать...

Как обработать нажатие комбинации клавиш: CTRL + ПКМ, ALT + ПКМ ?
push call ExitProcess WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru