Можно ли переместить уже связанный файл elf на другой адрес и также обновить внутренние ссылки?
Например, имея статически связанный файл elf, связанный с адресом 0x50000, как я могу переместить его на 0x1000000 и обновить указатели и адреса?
Можно ли переместить уже связанный файл elf на другой адрес и также обновить внутренние ссылки?
Например, имея статически связанный файл elf, связанный с адресом 0x50000, как я могу переместить его на 0x1000000 и обновить указатели и адреса?
Можно ли переместить уже связанный файл elf на другой адрес
В целом: нет. Компоновщик отбрасывает записи о перемещении, необходимые для обновления внутренних ссылок в исполняемом файле.
Теперь, если ваш исполняемый файл не использует глобальные данные и не принимает адреса каких-либо функций, и вы используете архитектуру, в которой JMP
s и CALL
s являются pc
-относительными, тогда он можно просто обновить сегменты PT_LOAD
и .e_entry
в сегменте Elf{32,64}_Ehdr
.