Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В информатике , указатель swizzling является преобразование ссылок на основе имени или положения прямых указателей ссылок. Обычно это выполняется во время десериализации (загрузки) перемещаемого объекта с диска, такого как исполняемый файл или структура данных на основе указателя . Обратная операция, заменяющая указатели позиционно-независимыми символами или позициями, иногда называется « отключением» и выполняется во время сериализации (сохранения).

Примеры [ править ]

Например, предположим, что у нас есть следующая структура данных связанного списка :

struct  node  {  int  data ;  struct  node  * next ; };

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

struct  node_saved  {  данные int  ; int id_number ; int id_number_of_next_node ; };    

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

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

Способы снятия шипения [ править ]

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

  • Смещение указанного объекта в файле
  • Индекс указанного объекта в некоторой последовательности записей
  • Уникальный идентификатор, которым обладает указанный объект, например номер социального страхования человека ; в базах данных все указатели раскручиваются таким образом (см. внешний ключ )

Возможные недостатки безопасности [ править ]

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

Методы защиты включают проверки перед передачей данных в приложение:

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

Способы обжаривания [ править ]

Swizzling в общем случае может быть сложным. Контрольный граф указателей может содержать произвольное количество циклов ; это усложняет поддержку сопоставления старых непрошитых значений с новыми адресами. Ассоциативные массивы полезны для поддержки отображения, в то время как такие алгоритмы, как поиск в ширину, помогают перемещаться по графу, хотя оба из них требуют дополнительной памяти. Различные библиотеки сериализации предоставляют общие системы обмена. Однако во многих случаях переключение может выполняться с упрощающими предположениями, такими как дерево или структура списка ссылок.

Существуют различные виды закуски:

  • Автоматическая подача
  • Выпивка по запросу

Ссылки [ править ]

Внешние ссылки [ править ]

  • Эта статья основана на материалах, взятых из Swizzle из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.