PE содержит кучу лишнего как раз в силу своей универсальности -- его можно адаптировать (по крайней мере теоретически) под любой процессор и любую ОС. Если же от универсальности отказаться, тогда действительно вполне можно упростить.
MZ хидер лучше убрать, а некоторые "ненужные" поля используются загрузчиком, хороший формат. Можно убрать левые SizeOfCode и SizeOfData, смысла особого в них не вижу, еще нужно OptionalHeader почистить, но с умом. Остальное сделано грамотно. Например количество DataDirectories может меняться, и это указано в доп. полях - залог на будущее. Главная муть это MZ Header. P.S. Все что кажется мало нужным может потом понадобится, и добавить это не всегда получится, так что если что-то убирать то с возможностью последующей добавки без ущерба для старых версий загрузчика.
Странная идея. "Идеального" ничего не бывает, и уж тем более странно, что за основу предполагается взять формат Portable Executable... Почему именно его, если загрузчик и линкер писать все равно с нуля?
Nothing имхо думаю, что он хорошо устроен, но там много лишней информации, если его немного переделать будить ну не "идеальный" формат, но точно не плохой (если всё хорошо сделать)
Ничего не надо убирать или добавлять. Формат оптимален для любого применения и под него есть куча софта. Зачем изобретать свой велосипед с квадратными колесами?
ntldr ну смотри, даже тот же MZ заголовок - зачем он надо? я понимаю совместимость, но его легко можно убрать, и создание проги переделать под новый формат - имхо это не тяжело (почти)
Затем, чтобы файл мог запускаться в DOS подобных ОС. Или вам несколько байт жалко? Можете конечно заниматься переделыванием всего подряд на свой лад, но это будет бесполезная работа. И еще вы вкурсе, что во всем должен быть порядок. Если каждый бы изобретал свой велосипед вместо использования существующих, то мы имели бы сейчас такой же бардак как и в 80е года, когда было множетсво не совместимых сежду собой ЭВМ. Так что предлагаю не маяться дурью, а осилить доки по PE.
На каждом компьютере или только у себя? PE долгожитель и отмирать не собирается и процветает, плавно переродившись в PE+ (PE64).
asmfan я хочу для себя разработать, но если кому та понадобиться - то дам свой вариант файла. Конечно, что не буду я заставлять использовать «мой» формат
Гыгы. Ага, великий и могучий AntiB может заставить всех использовать его формат, но он настолько великодушен что не принуждает никого к этому силой Если честно, то свой формат кроме как силовым внедрением продвинуть в настоящее время невозможно. А позволить себе внедрение силой могут только гиганты вроде Microsoft, да и то с трудом.
ntldr )) а я и не собираюсь, кому та навязывать свой формат, моя цель - это создать более "идеальной" формат, чем PE (если это возможно, я лично думаю что возможно) P.S.: майкрософт - у него нету будущего, мое мнение
Иконки там по-удодски хранятся, чтобы достать иконку, надо всю секцию ресурсов разобрать. А это медленно, проводник на этом месте начнает дико тупить, всякие ТоталКоммандеры - тоже, если в настройках отображение иконок не вырубить. При включённом антивирусе тупёж переходит в превосходные степени вплоть до полного задолбания пользователя. Мораль: иконку надо вынести из ресурсов файла в заголовок исполняемого файла.
еще один минус PE формату, еще не разобрался где иконки лежат, но предположительно думал, что в ресурсах... вот и кроме удаления некоторых лишних полей надо еще переделать немного формат
CyberManiac Там вообще-то они не тупо лежат, они там нормально лежат, сгруппированы. Причем идет поиск оптимальной иконки, по размерам, по цветовым битам и лопатить там ничего не надо, всего-лишь 2 входных структуры. Скорость зависит от количества иконок и групп и от того удалось ли найти нужную иконку, т.к. если ее нет то берется обычная и либо интерполируется либо деполируется чтобы довести ее до нормальных требований - вот они тормоза. Проводник помимио извлечения, еще кэширует их. Если иконку выложить в заголовок то что меняется? - ничего, придется всеравно выполнять поиск, трюки с преобразованием. Ресурсы сделаны гладко и гибко, все по смещениям. Работа с ресурсами может показаться сложной (так оно и есть), но вряд ли удастся ускорить процесс. Ресурсы - это универсальное хранилище, если добавить туда новый тип элемента, то менять вообще ничего не придется, там все относительно. Если кто-то сможет сделать подобное с меньшими извратами то респект ему. Ну а если иконки вынести из ресурсов то сразу выносите и данные и версии, манифест, сертфикаты и прочее что грузит проводник себе в кэш - вот это точно юмор.
im1111 Меняется как раз ВСЁ. Если иконка лежит в заголовке PE - с вероятностью 99% прочитав первые 8 килобайт файла мы получим всю информацию, необходимую для отображения иконки. Если иконка в ресурсах - нужно 1. Прочесть и разобрать PE-заголовок 2. Найти в файле секцию ресурсов и разобрать её структуру 3. Найти в секции ресурсов раздел ICONS, а в нём - иконку с минимальным номером. То есть изрядно попрыгать по файлу, и все эти прыжки для полумеханического устройства "жёсткий диск" займут куда больше времени, чем поиск оптимальной по цвету и размеру картинки в уже загруженном куске файла. Почему бы и нет? Манифест - это как раз тот случай, когда секцию ресурсов нагрузили абсолютно несвойственными ей функциями. Это не юмор, это реальность. Думаю, у многих разработчиков возникает желание вернуться на N лет назад и сказать самим себе, что надо было делать, и чего не надо было. А так - приходится тащить старые проекты с изначальными ошибками в идеологии до тех пор, пока бросить и начать заново не становится легче, чем тащить дальше. И у меня есть ощущение, что "секция ресурсов" - это как раз такой случай.
1. - А для поиска иконки в PE не надо никак с ним работать? 2. - Не надо ее разбирать, не надо ее считывать целиком. 3. - Это относится к пункту 2. Что реально нужно: 1. Берем из DataDirectories секцию ресурсов - тоже самое придется сделать с нахождением иконки в PE. 2. Находим в самом начале группу иконок, и ищем подходящую нам, вытаскиваем ее из раздела иконок который легко найти в самом начале, если она там одна, то искать вообще ничего не надо. - ну допустим мы вынесли секцию в PE и что? что меняется конкретно? - всеравно придется выполнять поиск, всеравно искать оптимальную иконку. Все что меняется - это способ получения указателя на раздел с иконками - мы берем его не из ресурсов а из PE, при этом если вынесем все из ресурсов в PE то будут пустовать неиспользуемые поля, если сделаем так же как и с DataDirectories - меняющийся размер, то получим простой изврат и никакой выгоды. Это во времена террабайтных SATA-3 и гигабайтов памяти? Считать пару сотен килобайт в память и разабрать их для нынешних многоядерниках и DDR3 не проблема. Это только усложнит PE.