Доступ за пределы виртуального задания RT-11
Интересный тестик для XM/ZM. Из-за того, что в RT-11 для виртуального задания PSW устанавливается в 140000 получается, что задание может лезть куда ему вздумается за пределы своего пространства. А вот если запустить через VBGEXE, то PSW будет 170000 и за пределы задания не вылезешь...
Код:
.TY VIO.MAC
.TITLE VIO -- ЖЕЛЕЗЯЧНЫЙ I/O ИЗ ВИРТУАЛЬНОГО ЗАДАНИЯ
.IDENT /V01.00/
.MCALL .EXIT,.SETTOP
.ASECT
.RAD50 /VIR/ ;ВИРТУАЛЬНОЕ ЗАДАНИЕ
.WORD -2 ;ВЕРХНИЙ ЛИМИТ
.PSECT
START:: MOV #200,@#177564 ;ЧТОБ НЕ ВИСЛО ЕСЛИ ЧТО
.SETTOP #-2 ;ПРОСИМ МАКСИМУМ ПАМЯТИ
MOV #140340,-(SP) ;СТАВИМ ПРИОРИТЕТ 7 ПРОЦУ ;)
MTPI @#177776 ;
MOV R0,R1 ;ВЕРХНИЙ АДРЕС
MOV #ADDR,R0 ;БУФЕР
MOV PC,R2 ;ФЛАГ НЕ ПОДАВЛЯТЬ НУЛИ В НАЧАЛЕ
CALL $CBOMG ;КОНВЕРТИРУЕМ В ASCII
MOV #TEXT,R0 ;АДРЕС СТРОКИ
10$: MOVB (R0)+,-(SP) ;ПОЛУЧАЕМ СИМВОЛ
BEQ 30$ ;0 - ЦОНЕЦ СТРОКИ
20$: MFPI @#177564 ;СТАТУС ТЕРМИНАЛА
TSTB (SP)+ ;
BPL 20$ ;НЕ ГОТОВ ЕЩЕ
MTPI @#177566 ;ПЕЧАТАЕМ СИМВОЛ
BR 10$ ;ЦИКЛ
30$: MOV #140000,@SP ;ПОНИЖАЕМ ПРИОРИТЕТ
MTPI @#177776 ;
.EXIT ;ВЫХОД
TEXT: .ASCII <15><12>/TOP ADDRESS: /
ADDR: .ASCIZ /XXXXXX/<15><12>
.END START
.RU VIO
TOP ADDRESS: 177776
.VRU VIO
.