Нечто подобное сделано в u-boot. Бинарник U-Boot грузится по
фиксированному адресу, но дальше переносит сам себя в самый конец
памяти (и релоцируется естественно). Кроме того, линуксовый кернел
в формате uImage/zImage тоже является саморелоцирующимся. Возможно
там найдутся готовые тулзы и скрипты.
Не надо делать мне как лучше, оставьте мне как хорошо