stringtranslate.com

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

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

Обратная операция, заменяющая указатели памяти на независимые от позиции символы или позиции, иногда называется unswizzling и выполняется во время сериализации (сохранения).

Пример

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

структура узла { интервал данных ; структура узла * следующий ; };       

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

struct node_saved { интервал данных ; интервал id_number ; int id_number_of_next_node ; };        

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

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

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

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

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

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

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

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

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

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

Смотрите также

Рекомендации

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