Каковы причины, по которым машинный код может изменяться между файлом на жестком диске и памятью процесса (в основном в Windows)?

#memory #machine-code #aslr

#память #машинный код #aslr

Вопрос:

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

Я могу придумать одну причину, по которой это может произойти: из-за ASLR указатель (который жестко закодирован в машинный код?) в сегменте кода, возможно, придется изменить, чтобы указать на то же самое. Действительно ли это одна из причин?

Есть ли какие-то другие причины? Отличается ли это от Windows/linux?

Комментарии:

1. Какую проблему вы на самом деле пытаетесь устранить, что заставило вас задать этот вопрос?

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