Je veux juste demander, je sais que les appels système standart sous Linux sont effectués par une instruction int pointant vers la table des vecteurs d'interruption. Je suppose que c'est similaire sur Windows. Mais, comment appelez-vous certaines routines système spécifiques de niveau supérieur? Par exemple, comment dites-vous Windows pour créer une fenêtre? Je sais que ceci est géré par le code dans la DLL, mais qu'est-ce qui s'est réellement passé au niveau de l'assembleur-instruction? Est-ce que la routine dans dll appelle le logiciel interrompu par une instruction int, ou y at-il une approche différente pour gérer cela? Merci. Faire un appel Win32 pour créer une fenêtre n'est pas vraiment lié à une interruption.Les appels système sur Windows
Répondre
L'application cliente est déjà liée au fichier .dll qui fournit l'appel qui expose l'adresse à utiliser par le lieur. Puisque vous posez la question sur la différence dans le mécanisme d'appel, je limite la discussion ici aux appels Win32 qui sont disponibles pour n'importe quelle application par opposition aux appels au niveau du noyau ou aux pilotes de périphériques. Au niveau du langage assembleur, ce serait la même chose que n'importe quel autre appel de fonction puisque la plupart des appels Win32 sont des appels au niveau de l'utilisateur qui effectuent en interne les appels de noyau nécessaires. L'éditeur de liens fournit l'adresse de la fonction Win32 comme cible pour une sorte d'instruction de branchement, les spécificités dépendront du compilateur.
[Éditer] On dirait que vous avez raison sur les interruptions et les int. table de vecteur. CodeGuru a un bon article avec les détails du système d'exploitation sur le fonctionnement des appels du noyau NT. Lien:
http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8035
L'API Win32 est une couche qui s'exécute en mode utilisateur (anneau 3). Windows utilisait également une couche API OS/2 et POSIX, mais ils sont tombés en désuétude et ont été supprimés. Le gestionnaire de fenêtres est un code en mode utilisateur pur, aucun appel de noyau n'est impliqué. Seuls les appels d'API qui utilisent les ressources du noyau (CreateThread, VirtualAlloc, etc.) appellent le système d'exploitation "réel" (ntdll.dll) et piègent dans l'anneau 0 avec une interruption logicielle (int 0x2e).
Ce n'est pas toute l'histoire. Depuis NT4 le gestionnaire de fenêtres a été dans le modèle de noyau (win32k.sys) et il a tout un tas de syscalls pour l'appeler. Même avant cela, il vivait dans CSRSS, et vous deviez appeler le noyau pour y accéder (en utilisant LPC) donc il y avait encore un appel de noyau impliqué. En outre, Windows n'a pas utilisé int 0x2e pour passer en mode noyau pendant un certain temps. Cela dépend de l'architecture sur laquelle vous êtes, mais généralement, maintenant, il utilise sysenter pour entrer en mode noyau sur x86. – Stewart
- 1. Les appels système se terminent
- 2. Assemblage et appels système
- 3. Surveiller les appels d'API
- 4. Les appels système et fork bloquent le port 3000
- 5. Comment intercepter/réécrire les appels Windows ODBC?
- 6. Est-il possible de faire des appels système sur iOS?
- 7. Outil pour tracer les horaires des appels système io
- 8. Que modifier pour optimiser les variables système mysql sur Windows?
- 9. Comment vérifier les autorisations du compte système local sur Windows?
- 10. Comment générer des événements système sur Windows?
- 11. propagation de variables d'environnement sur système Windows
- 12. en utilisant unix appels système en cpp
- 13. Objectif C sur le système Windows
- 14. Appels système de .NET vers mono
- 15. Empêcher le processus enfant des appels système
- 16. Gérer les appels Windows avec le programme .net?
- 17. Définir les variables système Windows avec Java
- 18. Windows Programmation du système
- 19. Surveillance de certains appels système effectués par un processus dans Windows
- 20. AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID pour les appels d'API Windows?
- 21. HttpWebRequests échouer sur les appels suivants
- 22. Les appels WCF Ajax bloquent-ils les appels?
- 23. Appels XML-RPC dans Windows Phone 7
- 24. structure du système d'exploitation Windows
- 25. Les appels asynchrones Javascript marchent les uns sur les autres
- 26. Recevoir des appels manqués dans Windows Mobile
- 27. Pilote Windows de suivi des appels
- 28. VB6 Erreur d'automatisation sur les appels à .NET 3.5 Assemblées Après les premiers appels
- 29. Le profil utilisateur Windows semble bloquer l'authentification de certificat sur les appels de service Web
- 30. Intercepter les appels entrants
Oui, je sais que DLL a les appels nécessaires à l'intérieur, je l'ai écrit. Mais fondamentalement tout ce que je demande est: A la routine de dll pour dessiner un syscalls de Windows sous la forme d'interruptions de logiciel, ou, sinon, comment dit-il au noyau de Windows pour faire une fenêtre? Pour autant que je sache, vous ne pouvez pas passer de l'espace de votre programme à un autre moyen que celui de l'instruction int de la limite de l'anneau. –
b-gen-jack-o-neill: AFAIK le noyau n'est pas responsable de la gestion des fenêtres. –
Sur les nouveaux processeurs, les instructions sysenter/sysexit sont utilisées au lieu d'émettre une interruption logicielle avec l'instruction INT. Le concept est le même, c'est un moyen de passer en mode noyau. Cependant, une fenêtre n'est pas gérée dans le noyau, vous ne trouverez pas d'appel système CreateWindow, mais plutôt d'autres appels système, y compris la communication avec d'autres processus - comme un gestionnaire de fenêtres – nos