Question

Comment passer de Windows en mode superviseur lors d'un appel système? J'ai entendu quelque chose au sujet d'un « piège 0 », mais cela ne semble même pas comme une instruction x86. Je certains appels par un pas de système, mais je ne trouve pas. Faire beaucoup de Windows appels exécuté en mode utilisateur? Ce qui NE PAS faire fonctionner en mode superviseur?

Était-ce utile?

La solution

appel système est également connu comme logiciel d'interruption . L'instruction x86 qui appelle une interruption logicielle a le mnémonique INT . Comment les données sont transmises au système d'exploitation est défini par le système d'exploitation ABI. Pour autant que je sache, Windows utilise le 0x80 immédiat pour toutes ses routines et envoie des données supplémentaires par l'intermédiaire des registres, mais je ne suis pas sûr. 0x20 est le premier disponible immédiatement, puisque la plage de 0 à 31 est réservé et utilisé pour les exceptions générales telles que la division entière par zéro et les défauts de mémoire.

Qu'est-ce que essentiellement qui se passe est que la CPU en mode privilégié et lit les IDTR (Interupt Descriptor Table Register). Là, il trouve l'adresse de mémoire physique pour l'IDT (Interupt Descriptor Table) et effectue une recherche dans l'IDT, sur la base du four immédiate 8 bits dans l'instruction d'interruption logicielle. L'IDT peut être stockée chaque fois dans la mémoire. IDTR peut être lu / écrit par les instructions lidt et sidt. Le IDT peut stocker une variété d'informations, mais pour les interruptions, il stocke l'adresse à la routine de service associé à l'INT immédiat.

Des exemples de win32-fonctions qui se déclenche une interruption logicielle .. hm. printf et amis ne vous, tout comme EnterCriticalSection . Sous Windows Vista et Windows 7, une API OpenGL et DirectX appelle maintenant besoin d'un aller-retour dans la terre du noyau en raison du nouveau gestionnaire composite. Pour OpenGL, qui applique pour toutes les fonctions qui lit le backbuffer actuel, comme glReadPixels, glCopy (Sub) TexImage2D, etc.

P.S: Prenez ce poste avec une pincée de sel. Cela a été un moment que je foiré autour avec Windows cette façon, et je n'a pas effectué beaucoup de vérification des faits. Et Edits commentaires sont les bienvenus.

Et voici un lien vers l'original Intel 386 manuel (qui Je citais de toute façon)

Autres conseils

CPU x86 fournissent les instructions de SYSENTER et SYSEXIT. Ces instructions exécutent un interrupteur très rapide du mode utilisateur au mode noyau et le dos, et les systèmes d'exploitation modernes fonctionnant sur les processeurs modernes utilisent le plus probable que ces interruptions ou au lieu d'appels loin très coûteux.

Vous pouvez voir plus de détails dans Manuels de développeur de logiciel d'Intel , en particulier Volume 2B

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top