Что делает слой эмуляции WoW64? - PullRequest
6 голосов
/ 16 марта 2011

enter image description here

Все приложения WoW64 проходят через слой эмуляции WoW64.
Я хотел бы знать, что происходит в этом слое (особенно, как они могут преобразовать адресное пространство)

Пожалуйста, дайте мне несколько важных моментов.

Ответы [ 3 ]

9 голосов
/ 24 марта 2011

Поскольку вы уже опубликовали диаграмму, ясно, что вы знаете, почему существует WOW64.Теперь, чтобы ответить на ваш вопрос:

Я хотел бы знать, что происходит в этом слое.

Я думаю, вы хотите знать, как это

Запуск процесса: загрузчик, как обычно, загружает 64-битную часть пользовательского режима 'Ntdll.dll', но также загружает 32-битную Ntdll.dll в случае, если процесс предназначен для 32-битного выполнения.Теперь загрузчики обязаны инициализировать с помощью Wow64.dll, который устанавливает контексты процессов и потоков в 32-битном Ntdll и «переключает ЦП в 32-битный режим» для выполнения.

Системный вызов: всетеперь работает в 32-битном режиме, до системного вызова.Мы знаем, что системные вызовы проходят через Ntdll.dll, User32.dll, Gdi32.dll и т. Д .;в этом случае 32-битные версии.Существует отдельная 32-разрядная версия этих библиотек, расположенная в папке \ Windows \ Syswow64 bit.Это просто заглушки, которые вместо «родных системных вызовов» фактически вызывают Wow64.dll.Теперь Wow64.dll легко перейти в 64-разрядный режим, преобразовать параметры в их 64-разрядные аналоги, выполнить системный вызов с использованием 64-разрядных версий, получить результат и преобразовать выходные данные в 32-разрядные.Затем он переводит ЦП обратно в 32-битный режим и возвращает вывод.

Диспетчеризация исключений, пользовательские обратные вызовы, операции с файловой системой и реестром, а также ввод / вывод обрабатываются таким же образом, используя перехватчики где-то вниз по линии,Прочитайте книгу, предписанную ниже.

(особенно, как они могут преобразовать адресное пространство).

64-битное адресное пространство - это расширенный набор32-битное адресное пространство.Кроме того, один и тот же указатель (фактически PTE) в 32-разрядном / 64-разрядном не используется для ссылки на все адресное пространство, но существуют отдельные таблицы страниц для пользовательского пространства и для системного пространства.

Пожалуйста, дайте мне несколько важных моментов.

Чтобы узнать о Windows, самое важное, что я могу вам сказать, это прочитать «Windows Internals» - Руссинович

2 голосов
/ 16 марта 2011

MSDN говорит:

WOW64 - это эмулятор x86, который позволяет 32-битным приложениям на базе Windows беспрепятственно работать в 64-битной Windows. WOW64 поставляется вместе с операционной системой и не требует явного включения.

Система изолирует 32-разрядные приложения от 64-разрядных, что включает предотвращение конфликтов файлов и реестра. Консоль, графический интерфейс и сервисные приложения поддерживаются. Система обеспечивает взаимодействие через границу 32/64 для таких сценариев, как вырезание и вставка и COM. Однако 32-разрядные процессы не могут загружать 64-разрядные библиотеки DLL для выполнения, а 64-разрядные процессы не могут загружать 32-разрядные библиотеки DLL для выполнения.

Что конкретно ты не понимаешь? Вы уже прочитали статью Википедии о подсистеме WoW64? Я думаю, вы обнаружите, что он дает довольно полный обзор.

И Microsoft предоставляет некоторые дополнительные сведения здесь: Детали реализации WOW64

0 голосов
/ 16 марта 2011

"особенно, как они могут преобразовать адресное пространство"

ключом к этому является знание того, что процессоры amd и intel x64 поддерживают параллельный запуск 32-битного и 64-битного кода. это позволяет ОС (при работе с родной x64) создавать контекст для 32-битного потока с 32-битной адресацией, который сосуществует с 64-битными потоками

Аналогичным образом, когда хост-компьютер работает под управлением 32-битной системы, он может создавать 16-битные потоки для запуска приложений win16 и dos.

Заметьте, я не думаю, что при работе в OS 64bit он может создавать 32-битные и 16-битные потоки - я думаю, amd решил, что это слишком большая обратная совместимость: -)

...