Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Форматы файлов и данных > PE формат.


Автор: ТарасАтавин 15.9.2013, 13:35
Пытаюсь разобрать PE файл, в заголовке секции .text читаю:
Name .text    
Virtual Size 00 00 0c 20    
Section RVA 00 00 10 00    
Physical Size 00 00 0e 00    
Physical Offset 00 00 04 00    
Object Flags 60 30 00 60. Как инициализируемая часть может быть больше полного размера?
Откуда смещение Physical Offset? От начала файла, от PE заголовка, или от заголовка секции? 

Автор: bems 15.9.2013, 14:24
Цитата(ТарасАтавин @  15.9.2013,  13:35 Найти цитируемый пост)
Как инициализируемая часть может быть больше полного размера?
The size of the section (for object files) or the size of the initialized data on disk (for image files). For executable images, this must be a multiple of FileAlignment from the optional header. If this is less than VirtualSize, the remainder of the section is zero-filled. Because the SizeOfRawData field is rounded but the VirtualSize field is not, it is possible for SizeOfRawData to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be zero.


Цитата(ТарасАтавин @  15.9.2013,  13:35 Найти цитируемый пост)
Откуда смещение Physical Offset? От начала файла, от PE заголовка, или от заголовка секции?  

The file pointer to the first page of the section within the COFF file. For executable images, this must be a multiple of FileAlignment from the optional header. For object files, the value should be aligned on a 4byte boundary for best performance. When a section contains only uninitialized data, this field should be zero

прочитай официальную спеку уже smile

Автор: ТарасАтавин 15.9.2013, 15:48
Цитата(bems @  15.9.2013,  14:24 Найти цитируемый пост)
The size of the section (for object files) or the size of the initialized data on disk (for image files). For executable images, this must be a multiple of FileAlignment from the optional header. If this is less than VirtualSize, the remainder of the section is zero-filled. Because the SizeOfRawData field is rounded but the VirtualSize field is not, it is possible for SizeOfRawData to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be zero.
Размер инициализированной части секции кратен FileAlignment. Эйси. Но как он может быть больше 
Virtual Size? Проверьте: 
Код
struct TSegmentHeader
{
 char Name[8];
 DWORD VirtualSize;
 DWORD SectionRVA;
 DWORD PhysicalSize;
 DWORD PhysicalOffset;
 uint8_t Reserved[0x0c];
 DWORD ObjectFlags;
};
.

Добавлено через 7 минут и 5 секунд
Цитата(bems @  15.9.2013,  14:24 Найти цитируемый пост)
прочитай официальную спеку уже
А где её можно найти в каких либо других форматах, кроме docx? doc, html, pdf...

Автор: bems 15.9.2013, 16:25
Цитата(ТарасАтавин @  15.9.2013,  15:48 Найти цитируемый пост)
Но как он может быть больше Virtual Size?
ну SizeOfRawData округлился в большую сторону, а VirtualSize нет, вот и больше.

Цитата(ТарасАтавин @  15.9.2013,  15:48 Найти цитируемый пост)
А где её можно найти в каких либо других форматах, кроме docx?

попробуй вот это https://dl.dropboxusercontent.com/u/16681494/pecoff_v83.doc

Автор: ТарасАтавин 15.9.2013, 18:43
Цитата(bems @  15.9.2013,  16:25 Найти цитируемый пост)
ну SizeOfRawData округлился в большую сторону, а VirtualSize нет, вот и больше.
А ничего, что у него свой алигн ещё в 8 раз больше? Причём, VirtualSize почему то вообще меньше своего алигна. Файловый алигн 200h, а объектный 1000h.

Автор: ТарасАтавин 15.9.2013, 19:15
Спробовал на дистрибутиве Хрома. То же самое, только сами числа больше.

Автор: bems 15.9.2013, 19:47
Цитата(ТарасАтавин @  15.9.2013,  18:43 Найти цитируемый пост)
А ничего, что у него свой алигн ещё в 8 раз больше?
ничего, потому что VirtualSize не округляется. А то что ты называешь "свой алигн" влияет на SectionRVA, а не размер

Автор: ТарасАтавин 15.9.2013, 19:57
Но по описанию именно на размер.

Автор: bems 15.9.2013, 19:59
Цитата(ТарасАтавин @  15.9.2013,  19:57 Найти цитируемый пост)
Но по описанию именно на размер. 
В спецификации явно сказано что поле VirtualSize хранится в файле не округленным. Я не знаю что тут еще надо доказывать

Добавлено через 1 минуту и 9 секунд
Кстати у тебя ошибка в оппосте
Virtual Size 00 00 0c 20   на самом деле там 00000C00

Автор: ТарасАтавин 15.9.2013, 20:04
Цитата(bems @  15.9.2013,  19:59 Найти цитируемый пост)
Virtual Size 00 00 0c 20   на самом деле там 00000C00 
Ни какой ошибки, просто использована смешанная система с основаниями 256, 16 и нижний регистра для цифр a-f. Я бу с удовольствием поменял регистр на верхний, но не знаю, каким потоковым манипулятором это можно сделать, а пробелы расставлены специально для удобства.

Добавлено через 3 минуты и 10 секунд
Цитата(bems @  15.9.2013,  19:59 Найти цитируемый пост)
В спецификации явно сказано что поле VirtualSize хранится в файле не округленным. Я не знаю что тут еще надо доказывать
В переводе сказано: 
Цитата
Размер секции кратен Object Aligne, а размер инициализированных данных - File Aligne.
.

Автор: bems 15.9.2013, 20:08
не в пробелах и регистре дело
у тебя двойка, а по факту там 0
ну по крайней мере в хексе, не знаю как это в "смешанной системе"

Автор: ТарасАтавин 15.9.2013, 20:12
Цитата(bems @  15.9.2013,  20:08 Найти цитируемый пост)
у тебя двойка, а по факту там 0
Где ноль? Там 00 00 0c 28h по смещению 00 00 01 80h. Hex-редактор подтверждает.

Автор: bems 15.9.2013, 20:13
Цитата(ТарасАтавин @  15.9.2013,  20:04 Найти цитируемый пост)
Размер секции кратен Object Aligne, а размер инициализированных данных - File Aligne.
не знаю что там за перевод, от какой он версии, и какие ошибки там еще не исправлены. Я тебе дал ссылку на спеку на сайте ms, и выложил сконвертированный в doc вариант. Из этого документа и процитировал объяснение во втором посте темы.
Что там еще где-то сказано это проблемы тех кто говорит

Добавлено @ 20:16
Цитата(ТарасАтавин @  15.9.2013,  20:12 Найти цитируемый пост)
Где двойка?


Код

у тебя                 00 00 0c 20  
в файле Test.exe       00 00 0c 00


Автор: ТарасАтавин 15.9.2013, 20:16
Цитата(bems @  15.9.2013,  20:13 Найти цитируемый пост)
у тебя                 00 00 0c 20
Там ещё восьмёрка.

Добавлено через 2 минуты и 21 секунду
Цитата(bems @  15.9.2013,  20:13 Найти цитируемый пост)
 и какие ошибки там еще не исправлены. 
Размер заголовка секции переоценен на 8 байт.

Автор: bems 15.9.2013, 20:24
Цитата(ТарасАтавин @  15.9.2013,  20:12 Найти цитируемый пост)
Где ноль? Там 00 00 0c 28h по смещению 00 00 01 80h. Hex-редактор подтверждает.
редактор РЕ-файлов не согласен с твоим хекс-редактором smile

Автор: ТарасАтавин 15.9.2013, 20:40
Цитата(bems @  15.9.2013,  20:24 Найти цитируемый пост)
редактор РЕ-файлов не согласен с твоим хекс-редактором
По подробней можно?

Автор: bems 15.9.2013, 20:42
оу, извиняюсь
virtual size действительно с28
я смотрел на raw size, там младший байт 0

Добавлено через 41 секунду
Цитата(ТарасАтавин @  15.9.2013,  20:40 Найти цитируемый пост)
По подробней можно?
не, я ж сказал что ошибся

Автор: ТарасАтавин 15.9.2013, 20:48
Цитата(bems @  15.9.2013,  20:42 Найти цитируемый пост)
не, я ж сказал что ошибся
Ваще то я про редактор, а не про ноль.

Автор: bems 15.9.2013, 21:45
Цитата(ТарасАтавин @  15.9.2013,  20:48 Найти цитируемый пост)
Ваще то я про редактор, а не про ноль.

редактор
https://dl.dropboxusercontent.com/u/16681494/PEtools.zip

Автор: ТарасАтавин 16.9.2013, 07:02
А официальная страница у него есть? И статья о классе на вике?

Автор: bems 16.9.2013, 15:56
там есть папка URLs, в которой кучка ссылок
у нас щас все кандидаты с такой блестящей способностью к добыванию информации и обучению, или есть нормальные?

Автор: ТарасАтавин 16.9.2013, 16:30
У меня антивирус даже на сам архив ругается.

Автор: bems 16.9.2013, 16:33
окей, не распаковывай

Автор: ТарасАтавин 16.9.2013, 17:48
Вот я потому и прошу официальный сайт. Чтоб прочитать о проге, не распаковывая данный архив.

Автор: bems 16.9.2013, 19:30
http://sourceforge.net/projects/pe-tools/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)