#memory #machine-code #aslr
#память #машинный код #aslr
Вопрос:
Как я понимаю, при запуске исполняемого файла все данные и исполняемый машинный код считываются в оперативную память в качестве памяти процесса. В некоторых частях исполняемого кода код меняется каждый раз, когда я запускаю исполняемый файл. Поскольку между запусками я не изменяю файл, это означает, что код в памяти процесса не совпадает с кодом на жестком диске.
Я могу придумать одну причину, по которой это может произойти: из-за ASLR указатель (который жестко закодирован в машинный код?) в сегменте кода, возможно, придется изменить, чтобы указать на то же самое. Действительно ли это одна из причин?
Есть ли какие-то другие причины? Отличается ли это от Windows/linux?
Комментарии:
1. Какую проблему вы на самом деле пытаетесь устранить, что заставило вас задать этот вопрос?
2. Нет, код не меняется каждый раз при запуске исполняемого файла. ASLR изменяет адрес , по которому код, данные, стек размещаются в памяти процесса, но блок кода остается прежним,. загрузчик обновляет только указатели на абсолютные адреса данных, чтобы они соответствовали текущему расположению памяти.