О ImageBase .EXE в Windows - PullRequest
       60

О ImageBase .EXE в Windows

2 голосов
/ 18 сентября 2010

Я только что узнал, ImageBase указан в формате PE, и ОС загрузит его в точное положение для .EXE, затем возникает вопрос:

что, если два .EXE требуют одинаковогоImageBase местоположение?

Ответы [ 2 ]

3 голосов
/ 18 сентября 2010

В случае двух EXE-файлов, они имеют совершенно разные адресные пространства ... Каждый исполняемый файл имеет свое собственное пространство. Это означает, что каждый раз, когда вы запускаете EXE-файл, ему присваивается свой независимый 4GB (в 32-битных системах, хотя процесс может использовать только его часть, остальное идет ядром.) Адресного пространства. Это Виртуальное адресное пространство . Это отличается от вашей физической памяти.

Так что конфликта нет.

Технически, PE может загружаться где угодно, но по умолчанию ImageBase равно 0x400000.

Теперь допустим, что у вас есть EXE-файл, и он загружает пару DLL (которые имеют одинаковую ImageBase) ... В этом случае первая DLL загружается нормально, вторая перемещается (или «перебазируется»). ). Каждая DLL имеет раздел .reloc, который содержит данные об обновлении ссылок в коде.

0 голосов
/ 18 сентября 2010

вы можете использовать Process Explorer , чтобы увидеть значения ImageBase и Base адресов любого работающего приложения (с его DLL).На основании этих значений вы можете увидеть, был ли произведен ребазинг.

...