Dafür schreibt der Compiler oder Linker eine Relocation Table mit den Adressen die gepatcht werden müssen.
Relocation ist das Konzept, wie es konkret umgesetzt wird, ist eine andere Sache. Es könnte auch einfach bedeuten, eine Sprungtabelle an einer wohl-bekannten Stelle im Code zu patchen.
Wenn Relocation vom Betriebssystem auf eine bestimmte Weise unterstützt wird, dann müssen sich die Programme daran halten. Wenn das Betriebssystem einen Sprungbefehl nicht unterstützt, darf der eben nicht verwendet werden.