Простой пример:
Если в популярной операционной системе стандартная библиотека C всегда загружалась по адресу 0x00100000, а последняя версия стандартной библиотеки C имела функцию system
со смещением 0x00000100, тогда, если кто-то мог использовать уязвимость в программе, работающей на компьютере с этой операционной системой (такой как веб-сервер), который заставляет его записывать некоторые данные в стек (через переполнение буфера), они будут знать, что очень вероятно, что если они запишут 0x00100100 в место в стеке, где текущая функция ожидала, что ее адрес возврата будет таким, что они могли бы сделать так, чтобы при возврате из текущей функции была вызвана функция system
. Хотя они все еще не сделали всего необходимого, чтобы заставить system
выполнить то, что им нужно, они близки, и есть некоторые приемы, которые записывают больше вещей в стек по адресу, упомянутому выше, с высокой вероятностью получающегося результата. в действительном указателе строки и команде (или серии команд), выполняемой этим принудительным вызовом к system
.
Путем рандомизации адресов, по которым загружаются библиотеки, злоумышленник с большей вероятностью просто рухнет на веб-сервере, чем получит контроль над системой.