Bonjour ! Je suis sous Windows 64 bits, je programme avec NASM en 32 bits.
J'essaye d'apprendre à utiliser les instruction IN et OUT directement depuis l'espace utilisateur. J'ai donc essayé ce petit code :
segment .data
format db "%x", 0
segment .text
global _main
extern _printf
_main:
in eax, 0x60
push eax
push format
call _printf
add esp, 8
ret
En l'exécutant, une erreur survient et un pop-up s'affiche me signalant que j'utilise une instruction privilégiée. Je réessaye donc en l'exécutant en tant qu'administrateur. Seulement là, rien ne se passe. Alors j'exécute mon programme avec gdb, et là il retourne une erreur disant que l'instruction est illégale (SIGILL).
Ai-je bien compris le fait que l'instruction IN est illégale ? Est-il possible de l'exécuter quand même ?
Les instructions IN et OUT sont parfaitement légales.
Mais.
Elles provoquent une exception quand on tente de les faire exécuter dans un mode qui ne l'autorise pas.
Les modes privilégiés sont ceux des couches basses du noyau, qui seules ont le droit d'accéder directement aux périphériques (et aux ports qui permettent de les piloter). Et c'est interdit aux autres, qui pourraient mettre le souk par mégarde, ou malfaisance.
Il ne suffit pas d'être administrateur, qui lui ausi fait tourner ses processus en mode privilégié, mais à qui le système donne plus de permissions, comme accéder aux fichiers des autres, mais pas d'aller taper directement dans les ports d'E/S ou n'importe où en mémoire,
A mon avis, dans un programme lancé par Windows ou Linux, c'est pas possible, parce que les processus tournent en mode protégé. Protection indispensable dans un système où il y a plein de processus susceptibles de déconner. Ils ont accès à leur espace memoire personnel et c'est tout. Pour le reste, ils font un syscall pour demander au système de faire des choses pour eux (et le système vérifie que c'est autorisé).
Dans les temps anciens, le démarrage BIOS et l'execution du bootsector se faisaient en mode réel, pour des raisons de compatibilité (pouvoir lancer ms-dos !). Je n'ai pas regardé de près, mais depuis le démarrage UEFI, j'ai cru comprendre que ce n'était plus le cas.
Va falloir chercher sur internet si tu veux vraiment faire ca.... bonne lecture et bon courage (c'est pas de la tarte)
- Edité par michelbillaud 28 mars 2024 à 23:36:28
[ASSEMBLEUR x86] Instructions IN et OUT
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
Le Tout est souvent plus grand que la somme de ses parties.