Ресурсы PE файла.

Тема в разделе "WASM.WIN32", создана пользователем Sunzer, 30 июн 2010.

  1. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Дайте ссылки на маны по поводу ресурсов PE файла.
    Так же есть несколько вопросов.

    Например для того что бы руками извлечь первую серию иконок в файле,
    нужно в начале сохранить данные расположенные в Icon Groups это я так понимаю хидер иконок? Далее обходим и дописываем в файл, все остатки из группы ресурсов Icon?

    В итоге получится нормальная иконка на диске?

    Или что означает эллемент из Icon Grpoup? Так как размер не большой, это наверное структура. Что за структура?
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Sunzer,

    Может, что-то в этой жизни проходит мимо меня, и ждать три часа ответа в форуме (вместо пары простых запросов) доставляет какое-то удовольствие?
     
  3. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Ман по форматам у меня есть, я уже понял, а про другой вопрос?
     
  4. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Так второй запрос и выдаёт первой ссылку на MSDN, где хоть и коряво, но описаны структуры, входящие в состав заголовка группы иконок/курсоров. Корявость выражается в неправильном описании структуры RESDIR, должна быть такая:
    Код (Text):
    1. #pragma pack(push, 1)
    2. typedef struct {
    3.   union {
    4.     ICONRESDIR Icon;
    5.     CURSORDIR  Cursor;
    6.   };
    7.   WORD  Planes;
    8.   WORD  BitCount;
    9.   DWORD BytesInRes;
    10.   WORD  IconCursorId;
    11. } RESDIR;
    12. #pragma pack(pop)
    Заголовок .Ico файла несколько отличается: вместо WORD IconCursorId там DWORD BitmapOffset (смещение в файле самой иконки, что в общем-то логично: идентификаторов ресурсов в нём нет).
     
  5. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Я верно описал структуру?
    Код (Text):
    1. struct RT_ICON_GROUP
    2. {
    3. 00 00 // Должно быть 0
    4. 01 00 // ICO формат
    5. 01 00 // Кол-во иконок
    6. // Далее идут по порядку массивы структур
    7. 30 // Ширина
    8. 30 // Высота
    9. 00 // ColorCount
    10. 00 // Reserved
    11. 01 00 // Planes
    12. 08 00 // BitCount
    13. A8 0E 00 00 // Размер иконки
    14. 32 // ID Первого уровня в директории ресурсов RT_ICON
    15. 00 // ID Второго уровня в директории ресурсов RT_ICON
    16. };
    Особенно интересует два последних байта

    Код (Text):
    1. 32 // ID Первого уровня в директории ресурсов RT_ICON
    2. 00 // ID Второго уровня в директории ресурсов RT_ICON
    А как быть, если в имени ресурса установлен 31 бит, и это ссылка на имя, как тогда будут выглядеть две записи выше? А так я уже разобрался с ресурсами.

    А самый главный вопрос, что бы сохранить первую группу иконок, нужно:
    Выгрузить первый хидер, дозаписать иконки, которые указаны в хидере, поправить хидер(указатели на иконки на диске) Так?

    [​IMG]

    Значение CodePage на что влияет?

    14 Сдампленых байт:

    Код (Text):
    1. 00 00
    2. 01 00
    3. 01 00 // Кол-во иконок
    4. 20 // Ширина
    5. 20 // Высота
    6. 10 // ColorCount
    7. 00 // Reserved
    8. 01 00 // Planes
    9. 04 00 // BitCount
    10. E8020000 // Размер иконки
    11. 3175
    7531h == 30001d
    Это указатель на иконку, ее имя в ресурсках RT_ICON?
    [​IMG]

    А может быть такое что в RT_ICON есть иконка, имя которой с установленным 31 битом, это ведь будет RVA на имя ресурса,тогда эксплорером это не распознается? Ведь судя по структуре выше такое не возможно?