и может быть активизирована в кратчайшее время. Активизация
таких программ осуществляется чаще всего при помощи так на-
зываемого прерывания. Одно такое прерывание (Interrupt) бу-
дет описано в следующем примере.
Вы пишете письмо. В середине предложения звонят в
дверь. Вы откладываете ручку в сторону, идете к двери и
приглашаете пришедшего войти. Неожиданно звонит телефон. Вы
просите посетителя немного подождать, идете к телефону, от-
вечаете и беседуете с абонентом. Затем Вы завершаете теле-
фонный разговор и можете посвятить себя посетителю. После
того, как посетитель уйдет, Вы вернетесь к письму и закон-
чите его. Это пример двойного вложенного прерывания поясня-
ет проблемы, возникающие при обработке прерываний, в част-
ности, задание различных приоритетов (если одновременно
звонят дверной звонок и телефон, на что реагировать в пер-
вую очередь?) и сохранение определенного состояния прерыва-
ния (что Вы делали в то время, когда зазвонил дверной зво-
нок - писали или говорили по телефону?). С этими основными
проблемами сталкивается процессор при обработке прерывания.
При возникновении прерывания обычная обработка прог-
раммы прерывается, и управление передается другой програм-
ме. Затем программа обработки прерывания определяет, вер-
нуться ли в вызывающую программу или продолжить выполнение
- 15 -
задачи.
1.2 Обработанные программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Обычно каждый программист старается обеспечить рабо-
тоспособность программного обеспечения. Например он стре-
мится избежать пресловутого "зависания" ЭВМ (постоянного
повторения программного цикла без возможности из него вый-
ти). Он старается также сделать так, чтобы неверный ввод
пользователя не мог повредить массивы данных и программ.
Программирование такой защиты осуществляется особенно тща-
тельно и является одной из важнейших проблем, возникающих
при создании программного обеспечения.
Если необходимо внести изменения в программу,представ-
ленную в виде объектного кода, следует учитывать серьезные
трудности, сопровождающие этот процесс, хотя бы уже потому,
что фирмы-создатели программного обеспечения обычно не пос-
тавляют вместе с программой ее исходного текста. Эта мера
предусмотрена для защиты от несанкционированного копирова-
ния и является несостоятельной. Еще ни одна программа, ни
одна защита от копирования не устояла от "разрушения".
Несмотря на серьезные трудности, связанные с этим заня-
тием, одним из наиболее распространенных увлечений компь-
ютерных чудаков является изменение записей о защите авторс-
ких прав в нелегально скопированных или официально купленных
программах. Так как смотреть на это не очень приятно, прог-
раммисты жертвуют (или фирмы-изготовители программного обес-
печения заставляют жертвовать) свое рабочее время на то,
чтобы сделать запись об авторских правах неизменяемой. Это
осуществляется либо путем последующего опроса во время вы-
полнения программы, либо путем декодирования закодированной
цепочки символов. И все же это не отбивает охоту у любителей
вносить изменения в имеющиеся, представленные только объект-
ным кодом программы.
Инструменты, предлагаемые для этой цели, многочисленны
и очень просты. Одним из таких инструментов является так
называемый дизассемблер. Это такая программа,с помощью ко-
торой можно при на личии некоторых специальных знаний полу-
чить из объектного кода исходный текст, который позволяет,
- 16 -
во-первых, понять и выполнить программу, во-вторых, приспо-
собить ее к своим потребностям.
Используя этот инструмент, можно, например, ввести оп-
ределенные изменения в программу расчета зарплаты для обес-
печения собственной выгоды. Если такую обработку проделать
умело, пользователь программы долго не заметит никаких из-
менений.
У читателя, однако, не должно создаваться впечатления,
что такую обработку программы может выполнить любой люби-
тель. Для работы с существующими объектными кодами необхо-
димы достаточно глубокие профессиональные знания.
1.3 Обрабатывающие программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Конечно, выполнение соответствующей обработки можно
возложить на программу. Каждая программа предназначена
обычно для изменения данных. Это относится и к редактору
текста, и к программе для подготовки счетов-фактур. Следую-
щий пример показывает, что эти изменения в массивах данных
могут выходить за пределы, представляемые и желаемые поль-
зователем:
Следующий текст сначала был записан при помощи функции
COPY операционной системы MS-DOS в файл test.txt, а затем
выведен на экран при помощи TYPE :
C:>TYPE TEST.TXT
Это тест, который показывает, сколько посторонних сим-
волов вставляет некоторый текстовый редактор в чистый ASCII
-текст.
(Dies ist ein Test, der belegt, wie viele Fremdzeichen
manche Textsysteme in einen reinen ASCII-Text einstreuen.)
Такой же текст (на немецком языке) был затем введен при
помощи текстового редактора (WordStar 2000) в документальном
формате и также при помощи TYPE выведен на экран монитора.
C:>TYPE TEST1.TXT
Ь WS2000 1.00 1IBMGRAPHIC 5 Ь
Ь 0 0 Ь Ьi
0 0iЬЬ^ 13^Ь Ь_ 4_Ь Ь [ A A
- 17 -
Наглядно видно, что теперь этот текст не может быть
обработан функцией TYPE. Этот эффект можно более подробно
исследовать при помощи отладчика.
Сначала текст, введенный при помощи COPY :
0100 44 69 65 73 20 69 73 74-20 65 69 6E 20 54 65 73
D i e s i s t e i n t e s
0100 74 2C 20 64 65 72 20 62-65 6C 65 67 74 2C 20 77
t , d e r b l e g t , w
0120 69 65 76 69 65 6C 65 20-46 72 65 6D 64 7A 65 69
i e v i e l e F r e m d z e i
0130 63 68 65 6E 20 6D 61 6E-63 68 65 20 54 65 78 74
c h e n m a n c h e T e x t
0140 73 79 73 74 65 6D 65 20-69 6E 20 65 69 6E 65 6E
s y s t e m e i n e i n e n
0150 72 65 69 6E 65 6E 20 41-53 43 49 49 2D 54 65 78
r e i n e n A S C I I - T e x
0160 74 20 65 69 6E 73 74 72-65 75 65 6E 2E 0D 0A 00
t e i n s t r e u e n . . . .
Ясно видно, что текст состоит из ASCII-символов, коды
которых лежат в диапазоне от шестнадцатиричных 20 до шест-
надцатиричных 80. Единственные управляющие символы, которые
были использованы,- это 0Dh и 0Ah (возврат каретки и пере-
вод строки).
Теперь посмотрим текст, введенный при помощи WordStar
2000:
0100 7F 20 57 53 32 30 30 30-FF 31 2E 30 30 FF FF FF
. W S 2 0 0 0 . 1 . 0 0 . . .
0110 FF 20 31 49 42 4D 47 52-41 50 48 49 43 FF FF FF
. 1 I B M G R A P H I C . . .
0120 FF 20 20 20 20 20 20 35-20 7F 0A 7F 1C 20 30 20
. 5 . . . . 0
0130 20 30 1C 7F 0A 7F 69 20-30 20 20 30 69 7F 7F 5E
0 . . . . i 0 0 i . . ^
0140 20 31 33 5E 7F 7F 5F 20-20 34 5F 7F 7F 5B 01 41
1 3 ^ . . _ 4 _ . . [ . A
0150 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
- 18 -
. . . . . . . . . . . . . . . .
0160 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0170 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0180 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 01 41
. . . . . . . . . . . . . . . A
0190 01 06 01 0B 01 10 01 15-01 1A 01 1F 01 24 01 29
. . . . . . . . . . . . . $ . )
01A0 01 2E 01 33 01 38 01 3D-FF FF FF FF FF FF FF FF
. . . 3 . 8 . = . . . . . . . .
01B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
01C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5B 7F
. . . . . . . . . . . . . . [ .
01D0 7F 61 37 31 61 7F 7F 5C-31 30 5C 7F 7F 5D 31 30
. a 7 1 a . . \ 1 0 \ . . ] 1 0
01E0 5D 7F 7F 62 31 31 62 7F-7F 65 31 65 7F 7F 66 31
] . . b 1 1 b . . e 1 e . . f 1
01F0 66 7F 7F 67 31 37 7F 7F-76 7F 7F 5B 01 41 01 06
f . . g 1 g . . v . . [ . A . .
0200 01 0B 01 10 01 15 01 1A-01 1F 01 24 01 29 01 2E
. . . . . . . . . . . $ . ) . .
0210 01 33 01 38 01 3D FF FF-FF FF FF FF FF FF FF FF
. 3 . 8 . = . . . . . . . . . .
0220 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0230 FF FF FF FF FF FF FF FF-FF FF FF FF FF 4B 01 06
. . . . . . . . . . . . . K . .
0240 01 0B 01 10 01 29 FF FF-FF FF FF FF FF FF FF FF
. . . . . ) . . . . . . . . . .
0250 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0260 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0270 FF FF FF FF FF FF FF FF-FF FF FF FF 5B 7F 7F 5B
. . . . . . . . . . . . [ . . [
0280 01 4B 01 06 01 0B 01 10-01 29 FF FF FF FF FF FF
. K . . . . . . . ) . . . . . .
- 19 -
0290 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02A0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02B0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02C0 01 41 01 06 01 0B 01 10-01 29 FF FF FF FF FF FF
. A . . . . . . . ) . . . . . .
02D0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02E0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02F0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0300 5B 7F 44 69 65 73 20 69-73 74 20 65 69 6E 20 54
[ . D i e s i s t e i n T
0310 65 73 74 2C 20 64 65 72-20 62 65 6C 65 67 74 2C
e s t , d e r b e l e g t ,
0320 20 77 69 65 76 69 65 6C-65 20 46 72 65 6D 64 7A
w i e v i e l e F r e m d z
0330 65 69 63 68 65 6E 20 6D-61 6E 63 68 65 20 54 65
e i c h e n m a n c h e T e
0340 78 74 7F 1F 7F 7F 03 7F-73 79 73 74 65 6D 65 20
x t . . . . . . s y s t e m e
0350 69 6E 20 65 69 6E 65 6E-20 72 65 69 6E 65 6E 20
i n e i n e n r e i n e n
0360 41 53 43 49 49 2D 54 65-78 74 20 65 69 6E 73 74
A S C I I - T e x t e i n s t
0370 72 65 75 65 6E 2E 0A 00-00 00 00 00 00 00 00 00
r e u e n . . . . . . . . . . .
приведенный текст во много раз больше введенного. Не-
которые управляющие символы, стоящие в заголовке, препятс-
твуют чтению текста при помощи TIPY, такой текст не может
быть использован какой-либо другой системой для обработки
текстов.
Однако управляющие символы стоят не только в заголов-
ке, но и в середине текста, а именно на месте верстки строк