L'idée clé que vous aurez besoin pour un système embarqué d'image repositionnable est la suivante:
- Chaque fois qu'un saut ou appelez l'instruction se produit, il doit être codé comme une adresse relative plutôt qu'absolue. Par exemple, dans x86, le
jmp
opcode pourrait être:
E9
, qui est jmp rel32
ou
EA
, qui est jmp ptr32
.
La raison pour laquelle vous devez coder de cette manière est particulièrement pertinent pour les systèmes embarqués. En revanche, pour un système embarqué, un système d'exploitation a un chargeur d'image qui place l'exécutable en mémoire et le prépare pour l'exécution. Une partie de la préparation effectuée par le chargeur d'image implique de réécrire toutes les adresses absolues en fonction de la relocalisation de l'exécutable en mémoire. C'est cette fonctionnalité du système d'exploitation qui donne lieu à la présence de "tables de relocalisation" dans les images exécutables. Sans un système d'exploitation permettant d'analyser et d'exploiter ces tables, aucune relocalisation ne peut avoir lieu.
Dans un paramètre système intégré, l'approche habituelle n'est pas de mettre en œuvre un système d'exploitation qui remappe les adresses absolues, mais d'éviter complètement les adresses absolues.
est ce Devoir? –
Même question ... –
J'espère vraiment ainsi ... considérer l'alternative. – Crashworks