Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт май 20, 2022 01:33

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Размышления о защищенной виртуальной машине.
СообщениеДобавлено: Вс май 04, 2008 22:57 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
Классическим для форта до недавних пор считалась ФВМ основанная на косвенном шитом коде (ITC).
Напомню, что в основе ITC лежит следующий механизм:
  1. каждое слово состоит из двух полей(речь о ФВМ): CFA - поля кода и PFA - поля параметров (данных), поле кода отвечает за то, каким образом будут интерпретироваться данные, содержит ссылку на ассемблерное представление команды ФВМ.
  2. в основе интерпретатора лежит механизм двойной ссылки, то есть, первая ссылка - это адрес поля CFA вызываемого слова,
    вторую адресную ссылку содержит само поле CFA, ссылаясь на ассемблерный код.
так выглядит ITC:
Изображение
напомню, что IP - указатель интерпретации,
за более полным разбором различных типов шитого кода сюда.

Косвенный шитый код притягателен тем, что позволяет полностью абстрагироваться от типа используемого процессора, а так же, при неком старании возможно создание переносимого между разными платформами кода (конечно, в разумных пределах).
Но, тем не менее такой код не изолирует виртуальную машину полностью, и позволяет при необходимости обращаться к ассемблерному коду напрямую, что с точки зрения защищенной ВМ очень плохо. Для ломания такой ВМ достаточно в поле параметров очередного слова разместить ассемблерный код, а в поле кода записать ссылку на него. В принципе, возможна ситуация, когда ассемблерный код будет находиться в отдельном защищенном от записи сегменте, но и этот подход не идеален и применим не ко всем процессорам.

да, NEXT для ITC выглядит следующим образом:

Код:
MOV addr , [IP]
ADD IP , # CELL
JMP [addr]
где, addr - временный регистр для хранения адреса, IP - указатель интерпретации


Последний раз редактировалось mOleg Пн май 05, 2008 04:07, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 04, 2008 23:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
Итак, появилась идея создания полностью защищенного типа ФВМ, основанного на новом типе ШК (на основе TTC).
Для того, чтобы избежать проблем ITC, а так же отвязаться от привязки к плотности размещения(размера) ассемблерного кода ВМ создается индексная таблица:
Код:
0 \ формат ассоциативной таблицы
    CELL -- off_codebase  \ указатель на блок памяти содержащих PFA
    CELL -- off_vmcode    \ указатель на поле CFA
    CELL -- off_wlink     \ указатель на поле LFA
    CELL -- off_codelimit \ предельный размер блока памяти
  CONSTANT /entry

        USER-VALUE ^Index  \ указатель на начало таблицы
        USER-VALUE ^iHere  \ указатель на первый свободный элемент таблицы

\ по номеру записи получить адрес внутри таблицы
: index> ( u --> addr ) /entry * ^Index + ;

Таблица состоит из 4-х полей, содержащих ссылки на различные поля слова:
off_wlink - это ссылка на словарную структуру слова, поля LFA, NFA и в принципе может остуствовать
off_codelimit - определяет размер слова
off_vmcode - ссылка на ассемблерный текст ФВМ, находящися за пределами доступа пользовательского процесса
off_codebase - собственно указывает на начало кода

у такой схемы следующие преимущества:

  1. нет привязки к реальным адресам (есть только индексы в таблице)
  2. возможна полная переносимость высокоуровневого кода в пределах одной разрядности CELL-а
  3. нет доступа к реальному процессору - нет возможности передать управление на ассемблерный код, и нет возможности определить, что за процессор используется.
  4. реализуемо практически на любых процессорных архитектурах
хотя, конечно, есть некоторые недостатки: традиционная неторопливость ITC, и необходимость представления адресов парой чисел index:offset (индекс блока памяти и смещение внутри него)

NEXT для такого типа ШК будет несколько более сложным:
Код:
MOV index, [IP]
ADD IP , # CELL
MOV addr, [index*16+i_table+off_codebase] 
MOV temp, [index*16+i_table+off_vmcode]
JMP temp

в принципе, возможно при такой организации в таблице хранить код типа:
Код:
MOV addr, # pfa
JMP # code


Последний раз редактировалось mOleg Пн май 05, 2008 04:10, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 00:29 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
В каком случае срабатывает эта защищённость?
Для запущенной программы или от програмиста, который кодирует на форте тоже?
Это своего рода "модель" форта.
На С это были бы 4 массива из которых один с указателями на функции (слова-примитивы), остальные - индексы для первого в разной последовательности ?

ИМХО - да, тема полезная

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 00:38 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
вопрос писал(а):
В каком случае срабатывает эта защищённость?

так же как в яве. Изоляция адресного пространства процесса от других процессов (у каждого процесса может быть своя таблица) - это основная защита. Но при этом защита получается сквозной, то есть, нет необходимости в шлюзах, дорогостоящем переключении задач (хотя интерпретатор ШК таки скушатет много времени).

вопрос писал(а):
Это своего рода "модель" форта.

не форта, а ФВМ (виртуальной форт машины).

вопрос писал(а):
На С это были бы 4 массива из которых один с указателями на функции (слова-примитивы), остальные - индексы для первого в разной последовательности ?

тут много вариантов, но лучше один массив с записями длиной до 16 байт (для интеля)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 00:38 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
mOleg писал(а):
off_vmcode - ссылка на ассемблерный текст ФВМ, находящися за пределами доступа пользовательского процесса

off_codebase - собственно указывает на начало код

Нельзя давать ВМ доступ к тем вещам, измение которых позволит получить доступ к местам вне системы.
Например, изменение смещения может позволить пропустить команды...
Лучшая возможность ограничить доступ - использовать не адрес, а индекс в таблице разрешенных точек входа. Тогда действительно будет ограничение доступа.
Параметры системных вызовов нужно проверять отдельно.

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 00:43 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
in4 писал(а):
Нельзя давать ВМ доступ к тем вещам, измение которых позволит получить доступ к местам вне системы.
Например, изменение смещения может позволить пропустить команды...

Таблица находится вне адресного пространства процесса, добавление слов в список производится по запросу к ядру.

in4 писал(а):
Лучшая возможность ограничить доступ - использовать не адрес, а индекс в таблице разрешенных точек входа.

Не получится, по крайней мере я себе этого не представляю. Где-то всеравно придется иметь дело с реальными адресами.
Опять же, прямого доступа у процесса к индексной таблице быть не должно.

in4 писал(а):
Параметры системных вызовов нужно проверять отдельно.

это вопрос более высокого уровня.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 00:48 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
вообще, в простейшем виде можно представить однозадачную форт-систему, ядро которой защищено от единственного пользовательского процесса (то есть отсутствует переключение задач).

пространство кода ядра, "интимные данные ядра", таблица ссылок
------------------------------------------------------------------------
пользовательский процесс, локальные данные процесса

При этом код пользовательского процесса может быть переносим на бинарном уровне, если фиксируются ссылки в таблице.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 11:49 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Я не въезжаю в назначение этой ВМ. И какое отношение она имеет к ФортОС ?

mOleg писал(а):
Для ломания такой ВМ достаточно в поле параметров очередного слова разместить ассемблерный код, а в поле кода записать ссылку на него.


Зачем изолировать ВМ полностью. И кому и зачем понадобится ломать эту ВМ.
Защищенная ВМ, мною давно реализована. Доступна через инет telnet://d14-435-04.rtc.ru:3333
Сейчас я бы сделал на базе http://devbiol.zoo.uwo.ca/~kvt/relf-0.2.zip
Чем твоя ВМ лучше этой?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 18:54 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
как в этой схеме представимы литералы? имхо, это не раскрыто.
строки, адреса, числовые константы..... ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 20:47 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Mihail писал(а):
Я не въезжаю в назначение этой ВМ. И какое отношение она имеет к ФортОС ?

Если делать ОС на основе ФВМ, то вопрос о защищённости возникает сам собою. И безо всякой ОС тоже может возникнуть.

Mihail писал(а):
Защищенная ВМ, мною давно реализована.
Чем твоя ВМ лучше этой?
Тем, что вынесена на обсуждение. И, видимо тем, что проста для понимания. :D
На самом деле, как судить, что лучше из 2 идей, если представлена только одна?
На обсуждение вынесен принцип а не реализация, ИМХО - реализацию тоже интересно рассмотреть.
Как реализована Защищенная ВМ Mihail'а?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 22:06 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
Mihail писал(а):
Я не въезжаю в назначение этой ВМ. И какое отношение она имеет к ФортОС ?

разнесение полей CFA & PFA позволяет реализовать неубиваемую замкнутую в пределах выделенной памяти виртуальную машину с очень дешовым переключением между процессом и ядром, а так же легко переносимую между разными типами процессоров. Так что отношение к ОС прямое. И еще, сейчас не будет выглядеть серьезной ни одна заявленная ОС без качественной защиты процессов от злоумышленника.

Mihail писал(а):
Зачем изолировать ВМ полностью. И кому и зачем понадобится ломать эту ВМ.

ну не знаю, вирусописателей в мире нет, например.
Mihail писал(а):
Защищенная ВМ, мною давно реализована.

описание в студию, пожалуйста.

Mihail писал(а):
Сейчас я бы сделал на базе http://devbiol.zoo.uwo.ca/~kvt/relf-0.2.zip

в чем ее преимущества?

Mihail писал(а):
Чем твоя ВМ лучше этой?

моя ВМ получается полностью изолированной от реального процессора.
к тому же элементарно решается проблема с подкачкой кода из свопа, защитой данных от выполнения.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 22:16 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
garbler писал(а):
как в этой схеме представимы литералы? имхо, это не раскрыто.
строки, адреса, числовые константы..... ?

да, пока не раскрыто, но чего непонятного-то. Механизмы похожие на ITC.

адреса представлены двумя числами (вчера еще думал, что это плохо, сегодня, что хорошо)
одно из чисел - индекс блока, второе - смещение внутри него.
Хорошо это потому, что портируемо между разными разрядностями данных и адресов, то есть методика будет одинаковой и для 16-битных, и для 32-битных, и для 64 битных процов и для других разрядностей.

числовые константы скорее всего правильно представлять литералами.

а вообще все в процессе ;)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 23:42 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
mOleg писал(а):
адреса представлены двумя числами (вчера еще думал, что это плохо, сегодня, что хорошо)

одно из чисел - индекс блока, второе - смещение внутри него.

при переходе с одной разрядности на другую все равно будут несовместимости :(
А раз они все равно будут, зачем увеличивать сложность и вводить пару сегмент:смещение. Даже на x86 стараются перейти на плоскую модель... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 05, 2008 23:50 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5034
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 61 раз.
in4 писал(а):
при переходе с одной разрядности на другую все равно будут несовместимости

не обязательно.

in4 писал(а):
А раз они все равно будут, зачем увеличивать сложность и вводить пару сегмент:смещение.

скорее селектор:смещение
сложность тут не то, чтобы увеличивается, зато преимуществ много, тот же контроль переполнения автоматический можно получить, полная отвязка от реальных физических адресов, отсутствие необходимости заморачиваться с достаточно сложной организацией виртуальной машины 86проца, тем более, что не все процы поддерживают аналогичную работу с памятью.

Плоская память не на столько удобна, как какжется. У сегментной модели есть свои преимущества.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 06, 2008 00:03 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
Mihail писал(а):
Защищенная ВМ, мною давно реализована.

описание в студию, пожалуйста.
Вот именно

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB