Jump to content

Указатель крутится

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

Обратная операция замены указателей памяти на независимые от позиции символы или позиции иногда называется unswizzling и выполняется во время сериализации (сохранения). В качестве альтернативы обе операции также можно назвать перелистыванием.

Легко создать структуру данных связанного списка, используя такие элементы:

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

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

struct node_saved {
        int data;
        int id_number;
        int id_number_of_next_node;
};

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

После загрузки такого списка поиск узла по его номеру затруднителен и неэффективен (последовательный поиск). Обход списка был очень быстрым с оригинальными указателями «Далее». Чтобы преобразовать список обратно в исходную форму или перевернуть указатели, необходимо найти адрес каждого узла и превратить поля id_number_of_next_node обратно в прямые указатели на правильный узел.

Методы раскрутки

[ редактировать ]

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

Способы свизлинга

[ редактировать ]

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

Различают следующие виды свизлинга:

  • Автоматическое вращение
  • Кручение по требованию

Потенциальные слабости безопасности

[ редактировать ]

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

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

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

См. также

[ редактировать ]

Дальнейшее чтение

[ редактировать ]
  • Уилсон, Пол Р. (1 июля 1991 г.) [июнь 1991 г.]. «Перемещение указателя во время ошибки страницы: эффективная поддержка огромных адресных пространств на стандартном оборудовании». Новости компьютерной архитектуры ACM SIGARCH . Том. 19, нет. 4. стр. 6–13. дои : 10.1145/122576.122577 .
  • Кемпер, Альфонс; Коссманн, Дональд (июль 1995 г.). «Стратегии адаптивного перемещения указателей в объектных базах: проектирование, реализация и количественный анализ» (PDF) . Международный журнал по очень большим базам данных . 4 (3): 519–567. дои : 10.1007/BF01231646 . S2CID   4556203 . Архивировано (PDF) из оригинала 25 июля 2008 г. Проверено 8 декабря 2021 г. (49 страниц)
  • Кроуфорд, Дерек (июнь 1992 г.). Азбука C Дерека . Том. 2. С. 340–343.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6c0064aae2abe2a0e3c988cb04e96f8d__1717446240
URL1:https://arc.ask3.ru/arc/aa/6c/8d/6c0064aae2abe2a0e3c988cb04e96f8d.html
Заголовок, (Title) документа по адресу, URL1:
Pointer swizzling - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)