2016-03-21 2 views
2

Согласно definitions из _IMAGE_OPTIONAL_HEADER и _IMAGE_OPTIONAL_HEADER64, AddressOfEntryPoint - это 32-разрядный DWORD для форматов файлов PE32 и PE64.Почему адрес точки входа 64-разрядного портативного исполняемого файла составляет всего 32 бита?

Почему AddressOfEntryPoint для PE64-файла только 32 бит? Разве это не должно быть 64 бита для покрытия всего виртуального адресного пространства?

+0

Разделы не могут превышать 4 ГБ, основное ограничение ОС. Так что 32 бит. –

ответ

2

документация, к которой вы связываете говорит:

Указатель на функцию точки входа, по отношению к базовому адресу образа.

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

Это косвенно означает, что точка входа не может иметь смещение от базового адреса более 4 ГБ, но это не является ограничением. Изображение PE не может превышать 4 ГБ по другим причинам. Например, SizeOfImage - это DWORD, что подразумевает ограничение на размер изображения 4 ГБ.