Недостатки PE-формата

Тема в разделе "WASM.OS.DEVEL", создана пользователем AntiB, 18 ноя 2007.

  1. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    PE содержит кучу лишнего как раз в силу своей универсальности -- его можно адаптировать (по крайней мере теоретически) под любой процессор и любую ОС. Если же от универсальности отказаться, тогда действительно вполне можно упростить.
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ну тогда и без RVA, если расставлять секции по-порядку
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ну и что что по порядку? в памяти они могут идти как хотят, и причем не непрерывно, а с окнами.
     
  4. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Ясно, главный недостаток PE-файлов то, что он имеет много лишнего
     
  5. Guest

    Guest Guest

    Публикаций:
    0
    MZ хидер лучше убрать, а некоторые "ненужные" поля используются загрузчиком, хороший формат. Можно убрать левые SizeOfCode и SizeOfData, смысла особого в них не вижу, еще нужно OptionalHeader почистить, но с умом. Остальное сделано грамотно. Например количество DataDirectories может меняться, и это указано в доп. полях - залог на будущее. Главная муть это MZ Header.
    P.S. Все что кажется мало нужным может потом понадобится, и добавить это не всегда получится, так что если что-то убирать то с возможностью последующей добавки без ущерба для старых версий загрузчика.
     
  6. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    Странная идея. "Идеального" ничего не бывает, и уж тем более странно, что за основу предполагается взять формат Portable Executable... Почему именно его, если загрузчик и линкер писать все равно с нуля?
     
  7. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Nothing
    имхо думаю, что он хорошо устроен, но там много лишней информации, если его немного переделать будить ну не "идеальный" формат, но точно не плохой (если всё хорошо сделать)
     
  8. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Ничего не надо убирать или добавлять. Формат оптимален для любого применения и под него есть куча софта. Зачем изобретать свой велосипед с квадратными колесами?
     
  9. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    ntldr
    ну смотри, даже тот же MZ заголовок - зачем он надо? я понимаю совместимость, но его легко можно убрать, и создание проги переделать под новый формат - имхо это не тяжело (почти)
     
  10. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Затем, чтобы файл мог запускаться в DOS подобных ОС. Или вам несколько байт жалко?
    Можете конечно заниматься переделыванием всего подряд на свой лад, но это будет бесполезная работа.
    И еще вы вкурсе, что во всем должен быть порядок. Если каждый бы изобретал свой велосипед вместо использования существующих, то мы имели бы сейчас такой же бардак как и в 80е года, когда было множетсво не совместимых сежду собой ЭВМ. Так что предлагаю не маяться дурью, а осилить доки по PE.
     
  11. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    ntldr
    может и так, но все, же я придержусь своего мнения - надо немного очистить формат PE
     
  12. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    На каждом компьютере или только у себя?

    PE долгожитель и отмирать не собирается и процветает, плавно переродившись в PE+ (PE64).
     
  13. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    asmfan
    я хочу для себя разработать, но если кому та понадобиться - то дам свой вариант файла. Конечно, что не буду я заставлять использовать «мой» формат
     
  14. ntldr

    ntldr New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    125
    Гыгы. Ага, великий и могучий AntiB может заставить всех использовать его формат, но он настолько великодушен что не принуждает никого к этому силой :)
    Если честно, то свой формат кроме как силовым внедрением продвинуть в настоящее время невозможно. А позволить себе внедрение силой могут только гиганты вроде Microsoft, да и то с трудом.
     
  15. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    ntldr
    :)))
    а я и не собираюсь, кому та навязывать свой формат, моя цель - это создать более "идеальной" формат, чем PE (если это возможно, я лично думаю что возможно)

    P.S.: майкрософт - у него нету будущего, мое мнение
     
  16. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Иконки там по-удодски хранятся, чтобы достать иконку, надо всю секцию ресурсов разобрать. А это медленно, проводник на этом месте начнает дико тупить, всякие ТоталКоммандеры - тоже, если в настройках отображение иконок не вырубить. При включённом антивирусе тупёж переходит в превосходные степени вплоть до полного задолбания пользователя. Мораль: иконку надо вынести из ресурсов файла в заголовок исполняемого файла.
     
  17. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    еще один минус PE формату, еще не разобрался где иконки лежат, но предположительно думал, что в ресурсах... вот и кроме удаления некоторых лишних полей надо еще переделать немного формат
     
  18. Guest

    Guest Guest

    Публикаций:
    0
    CyberManiac
    Там вообще-то они не тупо лежат, они там нормально лежат, сгруппированы. Причем идет поиск оптимальной иконки, по размерам, по цветовым битам и лопатить там ничего не надо, всего-лишь 2 входных структуры. Скорость зависит от количества иконок и групп и от того удалось ли найти нужную иконку, т.к. если ее нет то берется обычная и либо интерполируется либо деполируется чтобы довести ее до нормальных требований - вот они тормоза. Проводник помимио извлечения, еще кэширует их. Если иконку выложить в заголовок то что меняется? - ничего, придется всеравно выполнять поиск, трюки с преобразованием. Ресурсы сделаны гладко и гибко, все по смещениям. Работа с ресурсами может показаться сложной (так оно и есть), но вряд ли удастся ускорить процесс. Ресурсы - это универсальное хранилище, если добавить туда новый тип элемента, то менять вообще ничего не придется, там все относительно. Если кто-то сможет сделать подобное с меньшими извратами то респект ему. Ну а если иконки вынести из ресурсов то сразу выносите и данные и версии, манифест, сертфикаты и прочее что грузит проводник себе в кэш - вот это точно юмор.
     
  19. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    im1111
    Меняется как раз ВСЁ. Если иконка лежит в заголовке PE - с вероятностью 99% прочитав первые 8 килобайт файла мы получим всю информацию, необходимую для отображения иконки. Если иконка в ресурсах - нужно
    1. Прочесть и разобрать PE-заголовок
    2. Найти в файле секцию ресурсов и разобрать её структуру
    3. Найти в секции ресурсов раздел ICONS, а в нём - иконку с минимальным номером.

    То есть изрядно попрыгать по файлу, и все эти прыжки для полумеханического устройства "жёсткий диск" займут куда больше времени, чем поиск оптимальной по цвету и размеру картинки в уже загруженном куске файла.

    Почему бы и нет?

    Манифест - это как раз тот случай, когда секцию ресурсов нагрузили абсолютно несвойственными ей функциями.

    Это не юмор, это реальность. Думаю, у многих разработчиков возникает желание вернуться на N лет назад и сказать самим себе, что надо было делать, и чего не надо было. А так - приходится тащить старые проекты с изначальными ошибками в идеологии до тех пор, пока бросить и начать заново не становится легче, чем тащить дальше. И у меня есть ощущение, что "секция ресурсов" - это как раз такой случай.
     
  20. Guest

    Guest Guest

    Публикаций:
    0
    1. - А для поиска иконки в PE не надо никак с ним работать?
    2. - Не надо ее разбирать, не надо ее считывать целиком.
    3. - Это относится к пункту 2.

    Что реально нужно:
    1. Берем из DataDirectories секцию ресурсов - тоже самое придется сделать с нахождением иконки в PE.
    2. Находим в самом начале группу иконок, и ищем подходящую нам, вытаскиваем ее из раздела иконок который легко найти в самом начале, если она там одна, то искать вообще ничего не надо. - ну допустим мы вынесли секцию в PE и что? что меняется конкретно? - всеравно придется выполнять поиск, всеравно искать оптимальную иконку.
    Все что меняется - это способ получения указателя на раздел с иконками - мы берем его не из ресурсов а из PE, при этом если вынесем все из ресурсов в PE то будут пустовать неиспользуемые поля, если сделаем так же как и с DataDirectories - меняющийся размер, то получим простой изврат и никакой выгоды.

    Это во времена террабайтных SATA-3 и гигабайтов памяти? Считать пару сотен килобайт в память и разабрать их для нынешних многоядерниках и DDR3 не проблема. Это только усложнит PE.