Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056

Вывод времени. Защита резидента от повторной загрузки

22.02.2018, 04:36. Показов 1002. Ответов 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
RGB equ 1Fh         
VID EQU 0B800h
ROW EQU 1             
COL EQU 73          
SEP EQU 3Ah      
 
TIME SEGMENT
ORG 100h
ASSUME CS:TIME,DS:TIME
 
START:
JMP INIT
 
MOVEIT:            
PUSH DS
PUSH ES
PUSH SI
PUSH DI
 
MOV SI,CS
MOV DS,SI
MOV ES,SI
MOV SI,(OFFSET NewInt1C) + 2 + 5
XOR DI,DI
CLD
MOV CX,attente-(OFFSET NewInt1C)
REP MOVSB
 
MOV AX,251Ch
XOR DX,DX
INT 21h
 
POP DI
POP SI
POP ES
POP DS
 
NewInt1C PROC 
DEC BYTE PTR CS:attente
JZ MOVEIT
 
PUSH AX
PUSH BX
PUSH CX
PUSH DX 
PUSH ES
PUSH DI
 
CLD
 
MOV AX,VID
MOV ES,AX
MOV DI,(ROW-1)*160+(COL-1)*2 
 
MOV AH,2
INT 1Ah
 
MOV BX,CX   
 
MOV AL,BH   
MOV AH,RGB
MOV CL,4    
SHR AL,CL   
OR AL,30h
STOSW
MOV AL,BH
AND AL,0Fh
OR AL,30h
STOSW
 
MOV AL,SEP
STOSW
 
MOV AL,BL   
SHR AL,CL
OR AL,30h
STOSW 
MOV AL,BL
AND AL,0Fh
OR AL,30h
STOSW
 
MOV AL,SEP
STOSW
 
MOV AL,DH
SHR AL,CL
OR AL,30h
STOSW
MOV AL,DH
AND AL,0Fh
OR AL,30h
STOSW
 
POP DI
POP ES
POP DX
POP CX
POP BX
POP AX
 
         DB 0EAh 
Int1COfs DW ?
Int1CSeg DW ?
 
NewInt1C ENDP
 
attente DB 5
 
INIT:              
CLI
 
MOV AX,351Ch
INT 21h
MOV Int1COfs,BX
MOV Int1CSeg,ES
 
MOV AH,9
MOV DX,OFFSET copyright
INT 21h
 
MOV AX,251Ch
MOV DX,OFFSET NewInt1C
INT 21h
 
PUSH CS
POP ES
MOV ES,WORD PTR ES:2Ch
 
MOV AH,49h
INT 21h      
 
STI          
 
MOV AX,3100h
MOV DX,6     
INT 21h
 
copyright db 13,10,'Time! 3.4 - Coded By Sam In 1994 - 
          db The Flamoots Production - 96 Bytes In Memory!$'
TIME ENDS
END START
возникает вопрос по копированию резидентной части..
Assembler
1
2
3
4
5
MOV SI,(OFFSET NewInt1C) + 2 + 5
XOR DI,DI
CLD
MOV CX,attente-(OFFSET NewInt1C)
REP MOVSB
резидентная часть вроде полностью не будет копироваться.. т.к. пропускаются команды сравнения 2+5=7 байт..
Assembler
1
2
DEC BYTE PTR CS:attente     - 5 байт  
JZ MOVEIT     - 2 байта
почему тогда указана полная длина резидентной части для копирования, т.е. не отнимаются те самые 7 байт? ведь в этом случае скопируются в дополнение к резидентной части еще семь байтов расположенных за ней, а там уже по-сути мусор инициализационной части..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2018, 04:36
Ответы с готовыми решениями:

защита от повторной отправки формы
Как вы думайте в чем недостаток такой защиты от повторной отправки формы? if(isset($_SESSION)) //блокируем повторную отправку если ip...

Защита от повторной отправки формы
Привет. Есть форма, пусть для примера это будет форма отправки комментариев. С помощью плагина jquery.form.js форма отправляется на...

Защита от повторной записи в файл
мечтаю сделать защиту от повторной записи в фаил.когда юзверь нажимает кнопку Отправить,сообщение отправляется, а если еще раз...

3
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,310
Записей в блоге: 12
22.02.2018, 11:42
Тоже "выкопал из траншеи"?

Вообще, довольно странный код. Я бы так не стал делать. Нет никаких гарантий, что код не затрётся новой программой в течение последующих 5 тиков (по 55 мс). Вполне возможно, что эта прога будет запускаться из autoexec.bat (или как-то ещё), и сразу после неё будет запущено что-то другое, что потрёт этот резидентный код, не успевший скопировать себя ниже.
То, что в начале зачем-то инициализируется DS и ES – ещё ладно, но вот такие манипуляции делать явно не стоит.
Что же относительно этих 7 байт – это просто прогон автора, ИМХО. По сути, памяти всё равно выделено 6 параграфов (96 байт), код вместе с адресом старого обработчика занимает 84 байта. Поэтому будут ли последующие 7 мусорных байт скопированы или нет тут роли не играет.

Если очень хочется, лучше сделать либо как у меня (где удаляется PSP, да код там более громоздкий, но рабочий), либо хотя бы как в предыдущем примере (только освободив сначала environment – с большой вероятности этой "дырки" хватит, чтобы поместить туда резидентный код).

Вот ещё вариант:
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
.MODEL Tiny
.286
.CODE
.STARTUP
 
LOCALS
 
IntNo           =       08h             ; номер прерывания
HandlerOfs      =       30h;40h;80h     ; смещение, по которому будет копироваться обработчик (с отступом в 2-3 байта на инструкцию jmp), должно быть кратно 10h
HandlerShift    =       HandlerOfs-100h ; разница нового и исходного смещения обработчика
 
                jmp     InstallTSR
 
;-----------------------------------------------------------------------------------------------------------------------
 
HandlerStart:                           ; начало обработчика прерывания (между этой меткой и HandlerEntry могут храниться данные)
ORG     $-1
VentilOfs       DB      ?
VentilChars     DB      '\|/-'
HandlerEntry:                           ; точка входа обработчика прерывания
                push    ax
                push    bx
                push    ds
                
                push    cs
                pop     ds
                mov     al,VentilOfs
                inc     ax
                and     al,3
                mov     VentilOfs,al
                lea     bx,VentilChars
                xlat
                mov     ah,1Eh
                push    0B800h
                pop     ds
                mov     ds:[0],ax
 
                pop     ds
                pop     bx
                pop     ax
 
RealInt         DB      0EAh            ; возвращаем управление прерыванию (jmp far)
RealAddr        DW      ?,?
HandlerEnd:
ORG             $-4
 
;-----------------------------------------------------------------------------------------------------------------------
 
InstallTSR:
                mov     ah,9
                lea     dx,msgOk
                int     21h
 
                ; копируем наш код со смещением HandlerShift
                mov     si,offset HandlerStart
                mov     di,offset HandlerStart+HandlerShift
                mov     cx,(HandlerEnd-HandlerStart+1)/2
                rep movsw
 
                ; Освобождаем Environment
                mov     ah,49h
                mov     es,ds:[2Ch]
                int     21h
 
                ; Сдвигаем сегментный адрес
                mov     ax,cs
                add     ax,HandlerShift/16
                mov     ds,ax
 
                ; Получаем старый вектор прерывания
                mov     ax,3500h + IntNo
                int     21h
                mov     RealAddr[0],bx
                mov     RealAddr[2],es
 
                ; Перехватываем прерывание
                mov     ah,25h
                mov     dx,offset HandlerEntry
                int     21h
 
                ; Остаёмся резидентными
                mov     dx,offset HandlerEnd+HandlerShift
                int     27h
 
msgOk           DB      'TSR is installed!',13,10,'$'
 
END
Будет занимать на 30h (48) байт больше.
Но тут надо быть осторожным, т.к. в некоторых случаях (при работе с файлами, например) будет нужно увеличить это значение до 40h (80h – это уж совсем осторожный вариант)

p.s. А причём тут защита от повторной загрузки?
0
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
23.02.2018, 05:16  [ТС]
Цитата Сообщение от Jin X Посмотреть сообщение
p.s. А причём тут защита от повторной загрузки?
закомментируй две строчки сравнения в начале пользовательского обработчика, заново перекомпилируй..
попробуй запустить в DosBox'e исполняемый *.com файл программы хотя бы два раза подряд..
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,310
Записей в блоге: 12
23.02.2018, 10:24
Цитата Сообщение от proc3nt Посмотреть сообщение
закомментируй две строчки сравнения в начале пользовательского обработчика, заново перекомпилируй..
попробуй запустить в DosBox'e исполняемый *.com файл программы хотя бы два раза подряд..
Я тебе больше скажу: запусти не 2 раза подряд, а 1 раз эту прогу, второй – какую-нибудь другую.
Или оставь всё как есть (не удаляя эти 2 инструкции) и быстро запусти прогу 2 раза подряд. Быстро – это в течение ≈ 0,25 сек.
Проблема, собственно, в том, о чём я говорил:
Цитата Сообщение от Jin X Посмотреть сообщение
Нет никаких гарантий, что код не затрётся новой программой в течение последующих 5 тиков (по 55 мс). Вполне возможно, что эта прога будет запускаться из autoexec.bat (или как-то ещё), и сразу после неё будет запущено что-то другое, что потрёт этот резидентный код, не успевший скопировать себя ниже.
Поэтому так делать нельзя...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2018, 10:24
Помогаю со студенческими работами здесь

Защита резидентной программы от повторной установки
Есть две программы резидентная и обращающаяся к ней. Что надо добавить чтобы защитить резидентную от повторной установки в память? ...

Защита от повторной отправки POST-данных
браузер кэширует _POST. Если рефрешнуть то пост данные остануться, а значит сработает код еще раз. Надо после того, как 1 рах отправили...

Некорректный вывод строки из резидента
Здравствуйте. Суть такова, нужно в резидентной программе при нажатии CTRL+S вывести сообщение, допустим "Hello". Возвращаем...

Ошибка при попытке повторной загрузки картинки
Здравствуйте. uses system, system.Drawing, graphABC; var p: picture; b: bitmap; begin

Крашится приложение при повторной загрузки изображения через галерею
Привет! Ерунда такая. Указываю картинку для загрузки в View через галерею. Первый раз загружаю, нормально. Хочу указать другую....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru