Возможно ли релоцировать данные/стек процесса?

Правильно ли я понимаю, что мы не можем (в общем случае) корректно релоцировать (переместить по некоторому смещению) данные/стек процесса? Имеется в виду x86_64/AArch64 код, сгенерированный обычным компилятором. Пожалуйста, не путать с релокацией кода (PIC).
  • Вопрос задан
  • 1059 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Смотря что имеется в виду под "переместить". До начала выполнения стек можно поместить в любое место. Потому что адресация в стеке всегда выполняется относительно указателя стека/указателя кадра. Во время работы указатель стека можно сдвигать вниз на произвольную глубину. Использованную часть стека перенести во время работы нельзя. Данные в общем случае перенести нельзя. Чтобы было можно, нужно использовать базовый регистр и обращаться по смещениям от него. Например, так работают TLS и FDPIC. С другой стороны, код сгенерированный как PIC/PIE можно перемещать вместе с данными, а если анализировать фиксапы и применять только те из них, которые ссылаются в сегмент данных, данные можно перемещать отдельно от кода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы