PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Там избыточный функционал выкусывать который мне навыка не хватает,
а использовать как есть - неправильно и не удобно (без уточнений!).
Я видел протокол на сайте, почти как Виндоус - далее далее далее )))
Но потребность и удобство утилиты для любых версий от 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 STARTTSX-Plus:Код:.RU REGS PSW=140000 PSW=144000 PSW=170001Ну и как видим, TRAP сам по себе выводит из второго набора регистров (ну вобщем-то и логично - даже если он передается из системы [если напрямую - то это и так очевидно] - ей нет резона следить за 11 битом PSW)Код:.RU REGS PSW=170000 PSW=174000 PSW=170001 .
Последний раз редактировалось form; 27.03.2015 в 20:04.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Пример драйвера, меняющего системное приглашение. Поскольку тема посвящена программированию, это скорее именно пример
Хотя рабочий. Драйвер требует RT-11 V5.2 или новее (проверку не вставлял - лень было), кому интересно - может доделать. В общем случае, драйвер вешается на стандартный обработчик .PRINT (никаких векторов не перехватывается). Обработчик проверяет номер задания (0) и что задание 0 является KMON'ом (при этом не выполняется никаких сложных вычислений по адресу PC до прерывания). Если да, то проверяются два слова после вызова .PRINT - они уникальны для KMON и во всех RT-11 V5 такие:И если все совпало - подставляет свою подсказку. Для SJ монитора (в котором нет слова с номером задания в RMON) код загрузки убирает проверку номера.Код:SLHOOK: MOV R5,R5 30$: MOV (SP)+,R0
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Ну и на закуску пример как можно наступить на грабли, получив не тот результат который ожидался:Код:.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/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Последний раз редактировалось hobot; 28.03.2015 в 01:51.
Так что, в нашей любимой PDP-11 ТАКАЯ дырень в системе безопасности? Команда RTI в юзермоде вообще выполняться не должна, как и любая другая, изменяющая что-либо в PSW кроме NZVC. Банальный срыв стека в недоотлаженной программе и может рухнуть вся многозадачка. Это же неправильно!..
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
Никакой дырени в 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.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Я понял эту возможность так - пользовательская программа на одном из терминалов спокойно обрабатывает данные на компе, в то время как система работает со стандартными регистрами и обслуживает другой терминал. То есть ,form, ты вроде писал, что KMON всегда использует стандартные регистры.
---------- Post added at 06:19 ---------- Previous post was at 06:17 ----------
Это же песочница ! ))) Регистровая )))
Это возможность процессора - второй набор регистров R0-R5. При установке бита 11 в PSW выбирается набор R0'-R5', при сбросе R0-R5. При этом в пользовательском или супервизорском режиме программа может только установить этот бит (командой RTI), а сбросить обратно не может. Ни одна система на PDP-11 не использует второй набор регистров, соответственно программа может с ними развлекаться, но следует помнить, что другая программа тоже может с ними поразвлекаться
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)