· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ZEN —› Вопрос по полю PhysicalAddress структуры IMAGE_SECTION_HEADER PE-заголовка

Посл.отвђт Сообщенiе


Дата: Апр 7, 2004 16:12:59

Добрый день.

Вопрос относится к таблице секций PE-файла.
В файле windows.inc структура IMAGE_SECTION_HEADER имеет вид :

IMAGE_SECTION_HEADER STRUCT
Name1 db IMAGE_SIZEOF_SHORT_NAME dup(?)
union Misc
PhysicalAddress dd ?
VirtualSize dd ?
ends
VirtualAddress dd ?
SizeOfRawData dd ?
PointerToRawData dd ?
PointerToRelocations dd ?
PointerToLinenumbers dd ?
NumberOfRelocations dw ?
NumberOfLinenumbers dw ?
Characteristics dd ?
IMAGE_SECTION_HEADER ENDS

В "Формат исполняемых файлов PE , Hard Wisdom" в коментарии к полю Name1 читаем:
"Object Name - Имя объекта, остаток заполнен нулями, если имя объекта имеет длину 8 символов, то заключительного 0 нет. Некоторые PE дамперы падают на этом факте. Имя - штука отфонарная и никого ни к чему не обязывает."


Вопрос: правильно ли считать что поле PhysicalAddress как правило содержит 0?
Спасибо.


Дата: Апр 7, 2004 18:08:14 · Поправил: volodya

Это union.
Доки надо и на языке оригинала читать:

Total size of the section when loaded into memory.
If this value is greater than Size of Raw Data, the
section is zero-padded. This field is valid only for
executable images and should be set to 0 for object
files.

Так что, неправильно так считать.


Дата: Апр 7, 2004 19:04:37

volodya
Спасибо!
... я конечно извиняюсь ( может чего не понял ) но кажется Вы дали в ответе коментарий к VirtualSize, а меня интересует PhysicalAddress.
Просто в некоторых PE-просмотрщиках (т.к. PE Studio) этого поля вообще нет. Хотя может я неправильно понимаю термин "union". Поясните если можно. Спасибо.


Дата: Апр 7, 2004 19:42:50

Вот блин. А самому слабо? union - это термин С/С++. Переводится как "объединение". Это означает, с нашей точки зрения, что компилятор, просто-напросто, резервирует достаточный объем памяти, чтобы хранить ЛИБО одно, ЛИБО другое. В данном случае, хранится ЛИБО один DD, ЛИБО другой. Можно привести и другой пример:

union
f_1 dw ?
f_2 dd ?

Здесь, как видишь, я говорю, что неплохо бы хранить ЛИБО DW, ЛИБО DD. Компилятор это понимает и резервирует память под больший элемент - f_2. А хранится может либо f_1, либо f_2. Когда что - смотреть по контексту.


Дата: Апр 8, 2004 10:12:00

volodya
Спасибо! Теперь понятно.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069