В случае двух EXE-файлов, они имеют совершенно разные адресные пространства ... Каждый исполняемый файл имеет свое собственное пространство.
Это означает, что каждый раз, когда вы запускаете EXE-файл, ему присваивается свой независимый 4GB
(в 32-битных системах, хотя процесс может использовать только его часть, остальное идет ядром.) Адресного пространства. Это Виртуальное адресное пространство . Это отличается от вашей физической памяти.
Так что конфликта нет.
Технически, PE может загружаться где угодно, но по умолчанию ImageBase
равно 0x400000
.
Теперь допустим, что у вас есть EXE-файл, и он загружает пару DLL (которые имеют одинаковую ImageBase) ... В этом случае первая DLL загружается нормально, вторая перемещается (или «перебазируется»). ). Каждая DLL имеет раздел .reloc
, который содержит данные об обновлении ссылок в коде.