![]() |
eXeL@B —› Основной форум —› Проверьте на ошибки |
Посл.ответ | Сообщение |
|
Создано: 10 июня 2007 15:31 · Личное сообщение · #1 Проверьте на ошибки, неточности и возможные дополнения. Буду очень признателен. ![]() ![]() |
|
Создано: 10 июня 2007 15:39 · Личное сообщение · #2 |
|
Создано: 10 июня 2007 15:50 · Личное сообщение · #3 |
|
Создано: 10 июня 2007 15:54 · Личное сообщение · #4 |
|
Создано: 10 июня 2007 15:56 · Поправил: SLV · Личное сообщение · #5 > PE-файл строго структурирован и состоит из: заголовка (header), страничного имиджа и необязательного оверлея (overlay).
нет... по сути PE file: [ImageDosHeader (почти всё стаф кроме IMAGE_DOS_SIGNATURE и адреса ImageNtHeaders] [ImageNtHeaders (включает ImageNtSignature; FileHeader и собственно OptionalHeader] потом идёт массив ImageSectionHeader и сами объекты секций... за ними если надо оверлей... вобщем по сути PE я с тобой не согласен... Двойное слово Signature содержит сигнатуру и должно равняться числу 0x00004550, что соответствует строке “PE00”.
точнее строка "PE " =] При снятие дампа необходимо проверить данное поле, так как если дампер берет данное поле из памяти, то возможна ситуация когда паковщик изменяет его после загрузки файла.
как это телал tELock можно сказать =] а проверить данное поле я бы дополнил фразой "чтением с диска"... SizeOfImage – размер загружаемого модуля в памяти, начиная от базового адреса загрузки (ImageBase) до адреса конца последней секции, выровненного до соответствующего значения. Значение данного поля должно быть кратно SectionAlignment.
я бы ещё сказал что значение равно VirtualAddress+VirtualSize последней секции файла... CheckSum – контрольная сумма файла. Расчетом данного поля занимается функция CheckSumMappedFile из библиотеки Imagehell.dll
ещё MapFileAndCheckSum Если длина меньше восьми символов, то оставшиеся элементы заполняются нулями, если же имя занимает все восемь байт, то завершающий нуль отсутствует
кем заполняется? всем пофигу на Name секции.. VirtualSize – неокругленный виртуальный размер секции в памяти.
почему это неокруглённый? VirtualAddress – содержит смещение, по которому загрузчик должен отобразить секцию. Данное смещение вычисляется относительно ImageBase «необязательного» заголовка. Данный адрес должен быть выровнен в соответствии с полем Section Alignment. Крис Касперски пишет, что виртуальный адрес первой секции должен быть равен значению ALIGN_UP(SizeOfHeaders, SectionAlignment), в противном случае файл не грузиться.
не относительно ImageBase а считается: sect.VirtualAddress := Align(prev.VirtualAddress + prev.Misc.VirtualSize, peh.OptionalHeader.SectionAlignment); .... дальше ниасилил... ----- Shalom ebanats! ![]() |
|
Создано: 10 июня 2007 16:44 · Личное сообщение · #6 "А почему оглавление такое странное? Или ты просто ещё не дописал?" Еще не дописал. "Строго говоря, строке “PE00” в кодировке ANSI соответствуют байты 50h,45h,30h,30h. Мне кажется, вообще не стоит привязывать 32-битную сигнатуру к тексту." Согласен. В документации правда всеже привязывают к строке. Из-за этого и название PE-файл Прпвельней наверное написать "PE",/0,/0 или "PE",0,0 To SLV. Насчет сути PE-файла. Мне кажеться мы имеем в виду одно и тоже, только к заголовкам я отношу все заголовки, если можно так сказать (на самом деле не я, а документация). Если посмотреть на схему в файле, то она в точности повторяет твои слова. Если я правильно тебя понял. "кем заполняется? всем пофигу на Name секции.." ну если имя секции .rsrc то оставшиеся элементы должны быть нули, а если там будет мусор имя сеции будет воспринято иначе. К стати на данное имя не всем пофигу. "почему это неокруглённый?" Потомучто данное значение может быть и неокругленным. Загрузчик поймет. ![]() |
|
Создано: 10 июня 2007 16:58 · Личное сообщение · #7 |
|
Создано: 10 июня 2007 17:43 · Личное сообщение · #8 |
|
Создано: 10 июня 2007 17:44 · Поправил: SLV · Личное сообщение · #9 > Потомучто данное значение может быть и неокругленным. Загрузчик поймет. любой ребилдер оптимизирую структуру файла округлит её... я приверженец того что всё должно быть красиво и округлено... > ну если имя секции .rsrc то оставшиеся элементы должны быть нули, а если там будет мусор имя сеции > будет воспринято иначе. К стати на данное имя не всем пофигу. не это уже пересечение с дирой ресурсов... rsrc отдельный фрукт... а так на имя секции всем пох... кроме, ещё раз, rsrc... а по третьему суть что загрузчик копирует в цикле да, относительно ImageBase*, c рва секций с диска по их физическим адресам (PointerToRawData).. *: а как на счёт релоков и коллизий модулей? это ещё одно а то что я до этого писал просто как дополнение/примечание... ----- Shalom ebanats! ![]() |
|
Создано: 10 июня 2007 18:01 · Личное сообщение · #10 1. Изменить шрифт на более приятный глазу, на типа Verdana; 2. Сделать картинки четкими, а лучше по-хорошему некоторые картинки заменить таблицами, это я про начальные, которые показывают структуру PE 3. Нормально научится пользоваться форматированием в Word, так как во многих местах летают отступы P.S. А так документ будет очень полезен в конце своего пути ![]() |
|
Создано: 10 июня 2007 18:10 · Личное сообщение · #11 |
![]() |
eXeL@B —› Основной форум —› Проверьте на ошибки |