Задать вопрос

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

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

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

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