STR (sans privilège) |
Entreposage |
|---|---|
| ARM | |
Syntaxe
| STR{type}T{cond} Rt, [Rn {, #offset}] |
| STR{type}T{cond} Rt, [Rn] {, #offset} |
| STR{type}T{cond} Rt, [Rn], ±Rm {, shift} |
Paramètres
| Nom | Description | |
|---|---|---|
| type | Ce paramètre optionnel permet d'indiquer le type de données à appliquer : | |
| Constante | Description | |
| B | Cette constante permet d'indiquer un octet. | |
| H | Cette constante permet d'indiquer un demi-mot. | |
| - | Cette constante permet d'indiquer un mot. | |
| cond | Ce paramètre optionnel permet d'indiquer le code de condition. | |
| Rt | Ce paramètre permet d'indiquer un registre à entreposer | |
| Rn | Ce paramètre optionnel permet d'indiquer un registre sur lequel l'adresse mémoire est basé. | |
| offset | Ce paramètre permet d'indiquer une déplacement. | |
| Rm | Ce paramètre permet d'indiquer un registre contenu une valeur à utiliser comme déplacement. | |
| shift | Ce paramètre optionnel permet d'indiquer un décalage. | |
Description
Cette instruction permet d'entreposer un octet, un demi-mot ou un mot sans privilège.
Remarques
- Accès mémoire sans privilège : conçu pour les environnements utilisateurs : Cette version de l'instruction STR permet d'effectuer des opérations d'écriture mémoire sans nécessiter de privilèges élevés, ce qui est indispensable pour les applications tournant en mode utilisateur. Cela renforce la sécurité du système en limitant l'accès aux zones critiques de la mémoire.
- Suffixe T pour "Translation" vers le mode utilisateur : La lettre T dans le mnémonique (STRT) indique que la traduction d'adresse suit les permissions du mode utilisateur, même si l'instruction est exécutée en mode privilégié. Cela permet, par exemple, à un système d'exploitation de stocker des données dans la mémoire d'un processus sans outrepasser ses droits.
- Prend en charge plusieurs tailles de données : L'instruction prend en charge les types B, H et mot plein (32 bits), ce qui la rend adaptée au entreposage de données hétérogènes. On peut ainsi écrire des structures complexes contenant des entiers de différentes tailles avec une gestion fine de l'alignement mémoire.
- Modes d'adressage flexibles, même en mode non privilégié : Malgré les restrictions d'accès, cette instruction conserve la même souplesse d'adressage que les autres variantes de STR, y compris les déplacements immédiats, pré/post-indexés et les déplacements issus de registres avec décalage. Cela assure une compatibilité avec le code existant.
- Utile pour les gestionnaires de mémoire et d'entrée/sortie en espace utilisateur : Grâce à sa nature non privilégiée, cette instruction est parfaite pour écrire dans des tampons mémoire cartographiés pour un périphérique ou pour gérer la mémoire partagée entre processus, sans risquer de violer les règles de sécurité du système.
- Doit être utilisée avec prudence dans les systèmes d'exploitation multi-utilisateurs : Même si cette instruction respecte les droits du mode utilisateur, un mauvais paramétrage du MMU (Memory Management Unit) pourrait permettre des écritures indésirables dans des espaces mémoire protégés. Elle suppose donc que l'environnement d'exécution est bien sécurisé.
- Particulièrement utile en phase de debug contrôlé : Dans les environnements de debug ou de test, STR{type}T permet d'évaluer les permissions d'accès mémoire sans compromettre la stabilité du système. Cela permet de simuler des écritures dans des conditions réelles sans donner de privilèges superflus.
- Instruction souvent méconnue mais puissante en virtualisation : Dans les systèmes virtualisés ou les hyperviseurs, cette instruction trouve sa place pour écrire dans les contextes de machines invitées, tout en garantissant que seules les permissions de l'environnement simulé sont prises en compte. Elle est donc cruciale pour le respect des cloisonnements.
Dernière mise à jour : Dimanche, le 12 novembre 2017