виртуальный адрес - PullRequest
       17

виртуальный адрес

1 голос
/ 07 мая 2011

Предположим, я запускаю два экземпляра одной и той же программы.Будут ли текстовые области обеих программ иметь одинаковые виртуальные адреса?

Ответы [ 2 ]

1 голос
/ 07 мая 2011

Зависит. В большинстве систем, если вы дважды запускаете одну и ту же программу в одной и той же среде (одни и те же параметры и т. Д.), Вы обнаружите одинаковое сопоставление адресов. Это просто потому, что большая часть того, что делает процесс, является детерминированной, зависит только от среды, параметров командной строки, содержимого прочитанных файлов, но не от изменения данных, таких как дата или идентификатор процесса. Это очень полезно при отладке: если вы перезапустите свою программу, иногда даже после небольшого изменения кода и перекомпиляции, у вас есть шанс, что структура памяти останется прежней. Конечно, разные экземпляры программы, работающей одновременно, могут иметь одинаковые виртуальные адреса, но они не будут иметь одинаковые физические адреса.

Некоторые системы, такие как OpenBSD или Linux с различными настройками защиты, реализуют рандомизацию размещения адресного пространства (ASLR) . ASLR означает, что при каждом запуске процесса виртуальные адреса его кода, данных, стека (ов) и кучи (ей) определяются случайным образом. Это функции безопасности, разработанные для усложнения эксплойтов уязвимостей: код эксплойта не может просто получить доступ к известному коду по известным адресам. Однако, поскольку ASLR становится все более популярным, эксплойты также становятся более изощренными, чтобы обойти его. ASLR остается полезным, потому что он увеличивает рабочую нагрузку для писателя эксплойтов, не добавляя много сложности.

0 голосов
/ 07 мая 2011

Наверное, нет, но возможно, что они могли. Каждый процесс имеет свое независимое пространство памяти.

...