Здравствуйте, RailRoadMan, Вы писали:
RRM>Oberon язык компилируемый (если ошибся извините). Значит в скомпилированном модуле находятся машинные коды х86. Кто мешает мне вписать туда код на встроенном ассемблере? Для этого нужно испортирование какого-то модуля?
RRM>MOV BX,<левый адрес>
RRM>MOV [BX],<всякий мусор>
RRM>Проехались по чужой памяти.
В принципе, Оберон, конечно — язык компилируемый, хотя возможна и докомпиляция на стадии загрузки модуля. В Обероне изначально был способ переносить код между разными Оберон-системами (OMI), который впоследствии стал известен как JIT.
RRM>Я готов предположить, что просто так (без импорта каких либо модулей или дополнительных привилегий) нельзя писать код на встроенном ассемблере, но я ведь могу немного модифицировать уже скомпилированный двоичный файл и вписать туда приведенный код, ну или изменить адрес. Как такую ситуацию обработает ран-тайм? Эта пара интсрукций не является привеллегированной и в общем случае нельзя сказать, она допустима или нет.
RRM>Такая ситуация повалит всю систему, в системе с разделением памяти погибнет только один процесс.
Вопрос понятен и совершенно разумен.
Я и правда сначала не понял, на чем Вы делаете акцент.
Надо подумать...
В принципе, когда-то у меня возникал подобный вопрос, но я тогда решил, что в системах, критичных с точки зрения безопасности, никто не даст редактировать
исполняемые файлы. (Система может это запрещать?)
А можно попробовать и другой способ. Например, проверять контрольную сумму на этапе загрузки, или еще что-нибудь.
Главное, согласен — такую возможность нельзя упускать из виду.