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