ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
609520 Топик полностью
Николай Коровин (15.07.2015 17:57, просмотров: 56) ответил Codavr на Нунах. Флешь дырявый насквозь. Его х-ями крыли с момента появления. При этом адоб на критику реагировал с ужасающим похуизмом. То что придет на смену что-то лучшее не факт, но было бы очень неплохо.
Когда машины были в основном x86, то есть до вторжения говнопланшетов, решение было очень простым. Зачем делать безопасную виртуалку, если можно просто ограничить "ассортимент" машинного кода? Идея у меня крутилась давно, но со вторжением АРМ я на неё подзабил, может, и зря. Всё равно обещанной "кроссплатформенности всего-всего на свете" пока не очень-то видно. Клиентский скрипт пишется на x86 ассемблере и так и передаётся, текстом. Браузер выделяет ему массив под код и массив под данные и его в код собирает, перед каждым "mov регистр, адрес" или "ret" добавляя захардкоденную проверку, не вышли ли мы за границы памяти. Поддерживается только десятка полтора самых "базовых" операций, которые точно ничего дурного не натворят, да и как им натворить, если перед каждым чтением, записью или возвратом проверяется, попадаем ли мы в область данных и, соответственно, кода, и при невыполнении производится хардкодный джамп на выход, где хардкодно восстанавливается стек. Да, и со стеком работать вообще нельзя, сорри. Только регистры и память, вода только для детей и пулемётов стек только для вызовов и возвратов. Области для ввода и вывода определённых данных передаются при старте в регистрах, естественно, они находятся где-то в пределах разрешённой области данных. В двух словах: кастрировать систему команд до того минимума, которому легко будет обеспечить гарантированно безопасное исполнение (т. е. "слишком просто делается, чтобы налажать") и каждую потенциально небезопасную команду при ассемблировании принудительно предварить проверялкой, выкидывающей при любом нарушении.