6
votes

Que fait la couche d'émulation WOW64?

Entrez la description de l'image ici

Toutes les applications WOW64 suivent la couche d'émulation WOW64.
J'aimerais savoir ce qui se passe dans cette couche. (Surtout comment ils peuvent convertir un espace d'adresse)

donnez-moi quelques points importants.


0 commentaires

3 Réponses :


2
votes

MSDN dit:

WOW64 est l'émulateur X86 qui permet aux applications Windows 32 bits pour fonctionner de manière transparente sur des fenêtres de 64 bits. WOW64 est fourni avec le système d'exploitation et ne doit pas nécessairement être explicitement activé.

Le système isole des applications 32 bits à partir d'applications 64 bits, qui comprend la prévention des collisions de fichiers et de registre. Les applications de console, d'interface graphique et de service sont prises en charge. Le système fournit une interopérabilité dans la limite 32/64 pour les scénarios tels que la coupe et la pâte et com. Toutefois, les processus 32 bits ne peuvent pas charger des DLL à 64 bits pour l'exécution et les processus 64 bits ne peuvent pas charger des DLL 32 bits pour l'exécution.

Qu'est-ce que spécifiquement ne comprenez-vous pas? Avez-vous déjà lu le Article Wikipedia sur le sous-système WOW64? Je pense que vous constaterez que cela fournit un aperçu assez complet.

et Microsoft fournit des détails supplémentaires ici: Détails de la mise en œuvre WOW64


0 commentaires

-1
votes

"Surtout, comment ils peuvent convertir l'espace d'adresse"

La clé à celles-ci consiste à savoir que les processeurs AMD et Intel X64 sont prêts à faire fonctionner le code 32 bits et 64 bits côte à côte. Cela permet au système d'exploitation (lors de l'exécution de Native X64) de créer un contexte pour un fil de 32 bits qui a une adressage 32 bits qui coexiste avec les threads 64 bits

De la même manière que lorsque l'OS hôte exécute 32 bits, il peut créer des threads 16 bits pour exécuter des applications Win16 et DOS.

Remarque, je ne pense pas que lors de la course dans le système d'exploitation 64 bit, il peut créer des threads de 32 bits et 16 bits - je suppose que AMD a décidé qu'il s'agissait d'une trop grande compatibilité à l'envers: -)


1 commentaires

Non, les applications 16 bits ne sont pas prises en charge sous les versions X64 de Windows. Le lien MSDN en haut de ma réponse explique donc: "La principale raison est que les poignées ont 32 bits significatifs sur des fenêtres 64 bits. Par conséquent, les poignées ne peuvent pas être tronquées et transmises à des applications 16 bits sans perte de données."



10
votes

Depuis que vous avez déjà posté le diagramme, il est clair que vous savez pourquoi WOW64 existe. Maintenant pour répondre à votre question:

J'aimerais savoir ce qui se passe dans cette couche.

Je pense que vous voulez savoir comment il est mis en œuvre.

Démarrage du processus: Le chargeur charge la partie en mode utilisateur 64 bits 'ntdll.dll' comme d'habitude, mais charge également 32 bits ntdll.dll au cas où le processus est destiné à une exécution 32 bits. Il est désormais la responsabilité des chargeurs d'initialiser à l'aide de WOW64.DLL, qui définit les contextes de processus et de thread en 32 bits NTDLL et 'commute la CPU en mode 32 bits' pour l'exécution.

Call System: Tout fonctionne en mode 32 bits, jusqu'à ce qu'un appel système. Nous savons que les appels système passent via ntdll.dll, user32.dll et gdi32.dll, etc. Dans ce cas, les versions 32 bits. Il existe une version séparée 32 bits de ces bibliothèques situées dans le dossier Bit Windows \ SysWow64. Ce sont simplement des talons qui au lieu d'émettre des «appels de système natif», appellent réellement wow64.dll. Maintenant, il est simple pour WOW64.DLL de transition au mode 64 bits, convertissez les paramètres vers leurs homologues de 64 bits, émettez l'appel système à l'aide de versions 64 bits, obtenez le résultat et reconvertissez la sortie à 32 bits. Il transige ensuite la CPU à un mode 32 bits et renvoie la sortie.

Expédition d'exception, rappels d'utilisateurs, opérations de fichiers et d'opérations de registre, et l'E / S est traité de la même manière, en utilisant des crochets quelque part dans la ligne. Lisez le livre prescrit ci-dessous.

(surtout, comment ils peuvent convertir l'espace d'adresse).

L'espace d'adresses 64 bits est un sur-lieu d'espace d'adressage 32 bits. De plus, le même pointeur (en réalité PTE) en 32 bits / 64 bits n'est pas utilisé pour désigner l'espace d'adressage entier, mais il existe des tables de page séparées pour l'espace utilisateur et pour l'espace système.

donnez-moi quelques points importants.

Pour connaître Windows, le point le plus important que je puisse vous donner est de lire «Windows Internals» - Russinovich


0 commentaires