Эта статья включает в себя список ссылок , связанных материалов или внешних ссылок , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Май 2011 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Эта статья написана как руководство или путеводитель . ( Июль 2012 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
В информатике , указатель 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 в общем случае может быть сложным. Контрольный граф указателей может содержать произвольное количество циклов ; это усложняет поддержку сопоставления старых непрошитых значений с новыми адресами. Ассоциативные массивы полезны для поддержки отображения, в то время как такие алгоритмы, как поиск в ширину, помогают перемещаться по графу, хотя оба из них требуют дополнительной памяти. Различные библиотеки сериализации предоставляют общие системы обмена. Однако во многих случаях переключение может выполняться с упрощающими предположениями, такими как дерево или структура списка ссылок.
Существуют различные виды закуски:
- Автоматическая подача
- Выпивка по запросу
Ссылки [ править ]
- Пол Р. Уилсон : Перемещение указателя во время сбоя страницы: эффективная поддержка огромных адресных пространств на стандартном оборудовании , Новости компьютерной архитектуры ACM SIGARCH , том 19, выпуск 4, стр. 6–13. Июнь 1991 г.
- Альфонс Кемперы и Дональд Kossmann : Адаптационный Указатель Swizzling Стратегия в Основах объектов: проектирование, реализации, и количественный анализ (2,56 MB), Международный журнал по очень большим базам данных , том 4, выпуск 3, стр 519-567.. Июль 1995 г.
- Дерек Кроуфорд : «Азбука С Дерека», том 2, стр. 340–343. Июнь 1992 г.
Внешние ссылки [ править ]
- Эта статья основана на материалах, взятых из Swizzle из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.