(c) Иван Рощин, г.Москва, 1997
Изучение и отладка @-файлов
с помощью STS 5.1
Известно, что монитор-отлад-
чик STS позволяет свободно заг-
ружать и отлаживать @-файлы, за-
нимающие все 48 килобайт. Это
делает STS незаменимым для хак-
кера.
Я предлагаю небольшое усовер-
шенствование STS, смысл которо-
го заключается в следующем: пос-
ле загрузки @-файла в память,
указания некоторого параметра и
нажатия комбинации клавиш "SS+U"
значения всех регистров процес-
сора станут такими, какими они
были в момент нажатия кнопки
MAGIC. После этого можно, напри-
мер, продолжить выполнение ис-
следуемой программы в пошаговом
режиме.
Такая возможность пригодится
вам не только для исследования
чужих программ, но и для отлад-
ки своих собственных. Допустим,
вы написали программу, запусти-
ли ее, а она "зависла". В таком
случае можно нажать кнопку
"MAGIC", записать содержимое па-
мяти на диск, а потом загрузить
полученный @-файл в STS и выяс-
нить, в чем причина неправильной
работы программы.
WARNING! Все нижесказанное
относится ТОЛЬКО к STS 5.1!
Для преобразования STS 5.1
необходимо выполнить следующее:
1) Убедиться, что на диске при-
сутствуют файлы "STS5.1"
(этот файл также может назы-
ваться "STS5.1AL", "STS5.1XX"
и т.п.),"sts5.1a", "sts5.1b".
2) Запустить файл "STS5.1".
140.
3) Нажать клавишу "U". Адрес в
верхней части экрана должен
стать равным #FE2A.
4) С адреса #FE2A ввести коман-
ду ассемблера JP #FE74 (что-
бы можно было вызывать под-
программу, устанавливающую
значения регистров, при нажа-
тии "SS+U").
5) Начиная с адреса #FE71, вве-
дите программу:
#FE71: JP #F86A
LD HL,#FEB1
CALL #E354
LD HL,(#FEE6)
CALL #E33D
PUSH DE
PUSH HL
LD HL,#DC7B
SET 0,(HL)
BIT 2,E
JR NZ,#FE8D
RES 0,(HL)
POP HL
LD IX,#FEBF
CALL #E33D
LD A,(IX+#00)
INC IX
LD (#FE9F),A
LD (#FE00),DE
CP #E4
JR NZ,#FE92
LD (#FEFE),DE
LD (#FEE6),HL
POP AF
LD (#FEF4),A
RET
LD DE,(#E33B)
LD A,D
OUT (C),E
LD E,(HL)
INC HL
LD D,(HL)
INC HL
OUT (C),A
RET
5) Со следующего адреса (#FEBF)
введите блок кодов:
#FEBF: #F4,#FC,#F6,#F8,#FA,#EA,#E8,#EC
#EE,#F0,#F2,#E4
6) По приведенному дампу памяти
проверьте, правильно ли внесены
изменения:
#FE71 #C3,#6A,#F8,#21,#B1,#FE,#CD,#54
#FE79 #E3,#2A,#E6,#FE,#CD,#3D,#E3,#D5
#FE81 #E5,#21,#7B,#DC,#CB,#C6,#CB,#53
#FE89 #20,#02,#CB,#86,#E1,#DD,#21,#BF
#FE91 #FE,#CD,#3D,#E3,#DD,#7E,#00,#DD
#FE99 #23,#32,#9F,#FE,#ED,#53,#00,#FE
#FEA1 #FE,#E4,#20,#ED,#ED,#53,#FE,#FE
#FEA9 #22,#E6,#FE,#F1,#32,#F4,#FE,#C9
#FEB1 #ED,#5B,#3B,#E3,#7A,#ED,#59,#5E
#FEB9 #23,#56,#23,#ED,#79,#C9,#F4,#FC
#FEC1 #F6,#F8,#FA,#EA,#E8,#EC,#EE,#F0
#FEC9 #F2,#E4
2
После того, как вы набрали
эту программу, необходимо сохра-
нить ее на диске. Это можно сде-
лать двумя путями:
1) Записать весь STS вместе с
внесенными изменениями на
диск. Этот вариант является
оптимальным, если вам часто
приходится заниматься отлад-
кой @-файлов. Для записи нуж-
но сначала с помощью клавиши
"B" установить Bank=#18, за-
тем нажать клавишу "E" и пос-
ле появления меню "Setup"
выбрать пункт "Config Save".
2) Записать в отдельном файле
только внесенные изменения.
Для этого нажмите клавишу
'S', укажите имя файла, на-
пример, "@VIEW", затем стар-
товый адрес (#FE2A) и длину
(#A1 байт). Учтите, что при
каждом следующем запуске STS
для работы с @-файлами при-
дется загружать файл с изме-
нениями. Перед загрузкой это-
го файла необходимо нажать
'U', а после нее установить
Bank=#18.
Теперь я расскажу об особен-
ностях загрузки @-файлов. Преж-
де всего, перед загрузкой необ-
ходимо правильно установить зна-
чение Bank во избежание затира-
ния STS. Обычно Bank=#18. После
указания имени загружаемого
@-файла STS выдает в строках
Start и Len информацию из ката-
лога. Значение параметра Start
нужно запомнить (т.к. на самом
деле это не адрес начала загруз-
ки, а адрес вершины стека в
@-файле). Для правильной загруз-
ки вы должны указать Start =
#4000, Len = #C000. После за-
грузки вспомните значение пара-
метра Start, записанное в ката-
логе диска, и укажите его в ре-
гистре SP. Затем нажмите комби-
нацию клавиш 'SS+U', и регистры
примут соответствующие значения.
Далее можете отлаживать @-файл.
Учтите, что фрагмент про-
граммы, устанавливающий значения
регистров для @-файла, занимает
область памяти, в которой раньше
была процедура дизассемблирова-
ния с метками (при отладке
@-файлов она и не нужна). Фун-
кция пользователя, которая вызы-
вается по "SS+U", вначале со-
стоит из одной команды JP #FE74,
но после того, как значения ре-
гистров @-файла установлены, эту
функцию можно изменить.
* * *