Так вроде был драйвер от Alex_K для этого. Ну могу конечно написать новый. Опять же дистрибов системы полно - пора уже осваивать генерацию, а там легко поменять :)
Вид для печати
Там избыточный функционал выкусывать который мне навыка не хватает,
а использовать как есть - неправильно и не удобно (без уточнений!).
Я видел протокол на сайте, почти как Виндоус - далее далее далее )))
Но потребность и удобство утилиты для любых версий от 5.0 и до старших - это не отменяет.
гарантирую 100 просмотров и 12 спасиб.
Еще немного отвлекся от темы, но стало интересно проверить :)
А вообще пора заводить тему по особенностям систем и как их обходить... Возвращаясь к вопросу поставленному мной выше вскользь - легко ли спрыгнуть со второго набора регистров при выполнении программы в пользовательском режиме. Ну разумеется вариант прямой очистки PSW к которому доступ есть в XB/XM/ZB/ZM (в сущности даже из виртуальной задачи) не рассматриваем. Простая программка показала, что спрыгнуть можно легко через SST (например trap to 10):RT-11ZM:Код:.TITLE REGS
.IDENT /V01.00/
.MCALL .PRINT,.EXIT,.TRPSET
.ASECT
.=34
.WORD TRSST
.PSECT
START:: .TRPSET #AREA,#ILSST
TRAP 0
MOV #4000,-(SP)
MOV #10$,-(SP)
RTI
10$: TRAP 0
77
ILSST: TRAP 0
.EXIT
TRSST: MOV #PVAL,R0
MOV 2(SP),R1
MOV PC,R2
CALL $CBOMG
.PRINT #PTEXT
RTI
AREA: .BLKW 2
PTEXT: .ASCII /PSW=/
PVAL: .ASCIZ /XXXXXX/
.END START
TSX-Plus:Код:.RU REGS
PSW=140000
PSW=144000
PSW=170001
Ну и как видим, TRAP сам по себе выводит из второго набора регистров (ну вобщем-то и логично - даже если он передается из системы [если напрямую - то это и так очевидно] - ей нет резона следить за 11 битом PSW) :)Код:.RU REGS
PSW=170000
PSW=174000
PSW=170001
.
Пример драйвера, меняющего системное приглашение. Поскольку тема посвящена программированию, это скорее именно пример ;)
Хотя рабочий. Драйвер требует RT-11 V5.2 или новее (проверку не вставлял - лень было), кому интересно - может доделать. В общем случае, драйвер вешается на стандартный обработчик .PRINT (никаких векторов не перехватывается). Обработчик проверяет номер задания (0) и что задание 0 является KMON'ом (при этом не выполняется никаких сложных вычислений по адресу PC до прерывания). Если да, то проверяются два слова после вызова .PRINT - они уникальны для KMON и во всех RT-11 V5 такие:И если все совпало - подставляет свою подсказку. Для SJ монитора (в котором нет слова с номером задания в RMON) код загрузки убирает проверку номера.Код:SLHOOK: MOV R5,R5
30$: MOV (SP)+,R0
Ну и на закуску пример как можно наступить на грабли, получив не тот результат который ожидался:Код:.MAIN. MACRO V05.06 Saturday 28-Mar-15 02:19 Page 1
1 000000 012760 000002 MOV (PC)+,2(R0)
2 000004 000004 .WORD 4
3
4 000001 .END
Так что, в нашей любимой PDP-11 ТАКАЯ дырень в системе безопасности? Команда RTI в юзермоде вообще выполняться не должна, как и любая другая, изменяющая что-либо в PSW кроме NZVC. Банальный срыв стека в недоотлаженной программе и может рухнуть вся многозадачка. Это же неправильно!..
Никакой дырени в PDP-11. Команда RTI может и должна выполняться в user mode, и она не позволяет ни спрыгнуть с режима ни со второго набора регистров (включить его позволяет - такое поведение документировано). За вторым набором регистров вообще ни одна система не следит, но это не столько дыра, сколько недокументированная фича - через этот набор регистров программы могут общаться друг с другом.
Дыра есть в RT-11XM/XB/ZM/ZB - там виртуальная программа выполняется с битами режима 140000, что по сути дает полный доступ к памяти режима ядра. В TSX+ режим правильно выставляется в 170000 и потому обойти не получится.
---------- Post added at 08:33 ---------- Previous post was at 08:29 ----------
Кстати дыра с битами режима только в чистой виртуальной программе. В VBGEXE тоже устанавливается 170000.
Я понял эту возможность так - пользовательская программа на одном из терминалов спокойно обрабатывает данные на компе, в то время как система работает со стандартными регистрами и обслуживает другой терминал. То есть ,form, ты вроде писал, что KMON всегда использует стандартные регистры.
---------- Post added at 06:19 ---------- Previous post was at 06:17 ----------
Это же песочница ! ))) Регистровая )))
Это возможность процессора - второй набор регистров R0-R5. При установке бита 11 в PSW выбирается набор R0'-R5', при сбросе R0-R5. При этом в пользовательском или супервизорском режиме программа может только установить этот бит (командой RTI), а сбросить обратно не может. Ни одна система на PDP-11 не использует второй набор регистров, соответственно программа может с ними развлекаться, но следует помнить, что другая программа тоже может с ними поразвлекаться :)