2010-10-05 4 views
4

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

+3

Я подозреваю, что вы не задаете вопрос, который действительно хотите задать. Зачем вам нужен минимальный и максимальный адрес пользователя? Вы можете сделать это легко, вызвав GetSystemInfo, но чего вы пытаетесь достичь? Кроме того, что вы подразумеваете под «физической памятью»? Программы с пользовательским режимом напрямую не связаны с физической памятью. – wj32

+0

Причина, по которой я не хочу этого делать, заключается в том, что я хочу построить некоторую информацию по адресному пространству. Я не знал, что программы с пользовательским режимом имеют дело только с виртуальной памятью. То, что я действительно хочу получить, - это границы адресного пространства проводника Windows (например, 0x222ef до 0xffffff) для установки границ моей оси, а также того, что эти адреса соответствуют тем же сегментам памяти, что и для моих измерений имея в виду. – laertis

+0

В любом случае столбец «Адрес» панели «Карта памяти», в то время как я отлаживаю (с помощью ollydbg), отвечаю на мой вопрос? – laertis

ответ

2

Как прокомментировали 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

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

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

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

  2. Согласно проекту Windows, все процессы приложения (в том числе Internet Explorer), одну и ту же адресное пространство макета, где:

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

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

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

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

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