Адресное пространство Internet Explorer - PullRequest
4 голосов
/ 05 октября 2010

Хотя меня сейчас интересует адресное пространство Internet Explorer, я не возражаю против общего ответа.Вопрос в том, как я могу вычислить адресное пространство (а по адресному пространству - средний и минимальный и максимальный адрес в памяти - исправьте меня, если я ошибаюсь) процесса Windows.На самом деле это пространство фиксировано или изменено?Также я узнаю виртуальное или физическое адресное пространство, и если полученное мной является визуальным, то является ли оно одинаковым для каждого экземпляра IE, который я открываю?У меня есть отладчик (если быть точным, ollydbg), и я полагаю, что могу получить от него некоторую информацию, но я не могу указать, что и как.Пожалуйста, прими мой недостаток знаний, спасибо.

Ответы [ 3 ]

2 голосов
/ 30 августа 2012
  1. Вообще говоря, все приложения в операционных системах Windows работают с виртуальной памятью.Виртуальная память - это функция, которая сильно зависит от аппаратной поддержки со стороны процессора.Как только эта функция будет включена, процессор будет обрабатывать все обращения к памяти путем преобразования адресов в соответствии с информацией в таблицах страниц, определенных ядром.Но с другой стороны, мы можем утверждать, что все приложения в Windows работают с физической памятью, поскольку процессор может выполнять код и обрабатывать данные только в том случае, если они находятся в оперативной памяти, также называемой физической памятью.

    Виртуальная памятьпросто функция, позволяющая легко манипулировать трансляцией адресов памяти.Приложение режима ядра отличается от приложения режима пользователя только тем, что приложение режима ядра имеет доступ к таблицам страниц и тем самым может влиять на преобразование адреса доступа к памяти в естественный адрес физической памяти.Напротив, приложение в пользовательском режиме не имеет этих прав, потому что оно нарушит всю надежность и безопасность системы.

  2. В соответствии с дизайном Windows все процессы приложения (включая IE) имеют один и тот же адресмакет пространства, где:

    • Небольшая часть младших виртуальных адресов зарезервирована для перехвата разыменования нулевого указателя.Попытка доступа к этому региону приведет к ошибке нарушения доступа.
    • Некоторая огромная часть старших адресов зарезервирована для кода режима ядра.Этот регион недоступен из приложения пользовательского режима и используется всеми процессами в системе.
    • Часть посередине, нацеленная на код приложения и данные.И каждый процесс в системе имеет свою собственную схему этой области, которая неявно использует свою собственную физическую память.

    Если небольшая часть в начале выглядит так, имеет постоянный размер 64 КБ.Граница между частью приложения и ядром адресного пространства может находиться в двух местах.Первая - это широко распространенная граница по умолчанию, которая назначает ядру 2 Гб адресов в верхней части адресного пространства.Но ядро ​​Windows может быть запущено со специальным параметром, который уменьшает размер адресной части ядра до 1 Гб.Эта конфигурация ядра обычно используется на серверах, на которых работают базы данных, поскольку приложение bdatabase хочет иметь как можно большую часть адресного пространства из-за соображений производительности.

  3. Компоновка прикладной частиадресное пространство процесса представляется относительно стабильным.Это может немного измениться в зависимости от конфигурации приложения и действий приложения.Это верно для всех систем Windows вплоть до Vista.Начиная с Windows Vista, Microsoft применяет ASLR (рандомизация расположения адресного пространства).Назначение этой функции состоит в том, чтобы нарушить описанное выше сходство адресного пространства всех процессов, выполняющих одно и то же приложение.Эта функция применяется по соображениям безопасности.

  4. Чтобы получить схему памяти процесса, используйте уже упомянутые другими парнями системные вызовы WinAPI:

    • GetSystemInfo() -Получить информацию о прикладной части границ адресных пространств.
    • VirtualQueryEx() - Получить общую информацию о расположении адресного пространства.
    • Другие функции WinAPI для получения более подробной информации об областях адресного пространства.в зависимости от его типов.Посмотрите в MSDN для деталей.
2 голосов
/ 09 ноября 2010

Как прокомментировал wj32, приложения пользовательского режима работают только с виртуальной памятью.Всем им предоставляется одинаковое виртуальное адресное пространство, размер которого обычно составляет около 2 ГБ (в противном случае их можно настроить, что характерно для серверов БД).Точные адреса можно получить, используя GetSystemInfo.Например, в моей системе это то, что я получаю:

Python 2.6.3
>>> import win32api
>>> win32api.GetSystemInfo()
(0, 4096, 65536, 2147418111, 3L, 2, 586, 65536, (6, 5898))

3-е и 4-е приведенные значения указывают минимальные / максимальные адреса памяти, поэтому с точки зрения пользовательского режима все процессы получают 65536-2147418111 каких адресное пространство, примерно 2 ГБ.Однако я не думаю, что эта информация очень вам поможет.Если вы ищете страницы с определенными атрибутами в адресном пространстве процесса, вы можете использовать VirtualQueryEx (как снова прокомментировал wj32).Поведение VirtualQueryEx позволяет вам вызывать его несколько раз, начиная с минимального адреса процесса и увеличивая в соответствии с результатом предыдущего вызова, и получая полное представление о целевом пространстве памяти процесса.

0 голосов
/ 18 декабря 2010

Йонилевы верны.Приложение пользовательского режима может видеть только виртуальную память.Таким образом, все приложения имеют единое адресное пространство.ОС и MMU (блок управления памятью) преобразуют адрес виртуальной памяти в физический адрес.Если физический адрес не кэшируется в физической памяти, он будет извлекаться с жесткого диска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...